Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 870d953

Browse files
committed
Use tuple buffer in show_partition_list
1 parent 536ef57 commit 870d953

File tree

3 files changed

+275
-104
lines changed

3 files changed

+275
-104
lines changed

expected/pathman_callbacks.out

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,89 @@ INSERT INTO callbacks.abc VALUES (301, 0); /* +1 new partition */
198198
WARNING: callback arg: {"parent": "abc", "parttype": "2", "partition": "abc_5", "range_max": "401", "range_min": "301", "parent_schema": "callbacks", "partition_schema": "callbacks"}
199199
DROP TABLE callbacks.abc CASCADE;
200200
NOTICE: drop cascades to 4 other objects
201+
/* more complex test using rotation of tables */
202+
CREATE TABLE callbacks.abc(a INT4 NOT NULL);
203+
INSERT INTO callbacks.abc
204+
SELECT a FROM generate_series(1, 100) a;
205+
SELECT create_range_partitions('callbacks.abc', 'a', 1, 10, 10);
206+
create_range_partitions
207+
-------------------------
208+
10
209+
(1 row)
210+
211+
CREATE OR REPLACE FUNCTION callbacks.rotation_callback(params jsonb)
212+
RETURNS VOID AS
213+
$$
214+
DECLARE
215+
relation regclass;
216+
parent_rel regclass;
217+
BEGIN
218+
parent_rel := concat(params->>'partition_schema', '.', params->>'parent')::regclass;
219+
220+
-- drop "old" partitions
221+
FOR relation IN (SELECT partition FROM pathman_partition_list
222+
WHERE parent = parent_rel
223+
ORDER BY range_min::INT4 DESC
224+
OFFSET 4) -- remain 4 last partitions
225+
LOOP
226+
RAISE NOTICE 'dropping partition %', relation;
227+
PERFORM drop_range_partition(relation);
228+
END LOOP;
229+
END
230+
$$ LANGUAGE plpgsql;
231+
SELECT * FROM pathman_partition_list
232+
WHERE parent = 'callbacks.abc'::REGCLASS
233+
ORDER BY range_min::INT4;
234+
parent | partition | parttype | partattr | range_min | range_max
235+
---------------+------------------+----------+----------+-----------+-----------
236+
callbacks.abc | callbacks.abc_1 | 2 | a | 1 | 11
237+
callbacks.abc | callbacks.abc_2 | 2 | a | 11 | 21
238+
callbacks.abc | callbacks.abc_3 | 2 | a | 21 | 31
239+
callbacks.abc | callbacks.abc_4 | 2 | a | 31 | 41
240+
callbacks.abc | callbacks.abc_5 | 2 | a | 41 | 51
241+
callbacks.abc | callbacks.abc_6 | 2 | a | 51 | 61
242+
callbacks.abc | callbacks.abc_7 | 2 | a | 61 | 71
243+
callbacks.abc | callbacks.abc_8 | 2 | a | 71 | 81
244+
callbacks.abc | callbacks.abc_9 | 2 | a | 81 | 91
245+
callbacks.abc | callbacks.abc_10 | 2 | a | 91 | 101
246+
(10 rows)
247+
248+
SELECT set_init_callback('callbacks.abc',
249+
'callbacks.rotation_callback(jsonb)');
250+
set_init_callback
251+
-------------------
252+
253+
(1 row)
254+
255+
INSERT INTO callbacks.abc VALUES (110);
256+
NOTICE: dropping partition callbacks.abc_7
257+
NOTICE: dropping partition callbacks.abc_6
258+
NOTICE: dropping partition callbacks.abc_5
259+
NOTICE: dropping partition callbacks.abc_4
260+
NOTICE: dropping partition callbacks.abc_3
261+
NOTICE: dropping partition callbacks.abc_2
262+
NOTICE: dropping partition callbacks.abc_1
263+
INSERT INTO callbacks.abc VALUES (120);
264+
INSERT INTO callbacks.abc VALUES (130);
265+
NOTICE: dropping partition callbacks.abc_8
266+
INSERT INTO callbacks.abc VALUES (140);
267+
NOTICE: dropping partition callbacks.abc_9
268+
INSERT INTO callbacks.abc VALUES (150);
269+
NOTICE: dropping partition callbacks.abc_10
270+
SELECT * FROM pathman_partition_list
271+
WHERE parent = 'callbacks.abc'::REGCLASS
272+
ORDER BY range_min::INT4;
273+
parent | partition | parttype | partattr | range_min | range_max
274+
---------------+------------------+----------+----------+-----------+-----------
275+
callbacks.abc | callbacks.abc_11 | 2 | a | 101 | 111
276+
callbacks.abc | callbacks.abc_12 | 2 | a | 111 | 121
277+
callbacks.abc | callbacks.abc_13 | 2 | a | 121 | 131
278+
callbacks.abc | callbacks.abc_14 | 2 | a | 131 | 141
279+
callbacks.abc | callbacks.abc_15 | 2 | a | 141 | 151
280+
(5 rows)
281+
282+
DROP TABLE callbacks.abc CASCADE;
283+
NOTICE: drop cascades to 5 other objects
201284
DROP SCHEMA callbacks CASCADE;
202-
NOTICE: drop cascades to 2 other objects
285+
NOTICE: drop cascades to 3 other objects
203286
DROP EXTENSION pg_pathman CASCADE;

sql/pathman_callbacks.sql

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,50 @@ INSERT INTO callbacks.abc VALUES (301, 0); /* +1 new partition */
9797

9898
DROP TABLE callbacks.abc CASCADE;
9999

100+
/* more complex test using rotation of tables */
101+
CREATE TABLE callbacks.abc(a INT4 NOT NULL);
102+
INSERT INTO callbacks.abc
103+
SELECT a FROM generate_series(1, 100) a;
104+
SELECT create_range_partitions('callbacks.abc', 'a', 1, 10, 10);
105+
106+
CREATE OR REPLACE FUNCTION callbacks.rotation_callback(params jsonb)
107+
RETURNS VOID AS
108+
$$
109+
DECLARE
110+
relation regclass;
111+
parent_rel regclass;
112+
BEGIN
113+
parent_rel := concat(params->>'partition_schema', '.', params->>'parent')::regclass;
114+
115+
-- drop "old" partitions
116+
FOR relation IN (SELECT partition FROM pathman_partition_list
117+
WHERE parent = parent_rel
118+
ORDER BY range_min::INT4 DESC
119+
OFFSET 4) -- remain 4 last partitions
120+
LOOP
121+
RAISE NOTICE 'dropping partition %', relation;
122+
PERFORM drop_range_partition(relation);
123+
END LOOP;
124+
END
125+
$$ LANGUAGE plpgsql;
126+
127+
SELECT * FROM pathman_partition_list
128+
WHERE parent = 'callbacks.abc'::REGCLASS
129+
ORDER BY range_min::INT4;
130+
131+
SELECT set_init_callback('callbacks.abc',
132+
'callbacks.rotation_callback(jsonb)');
133+
134+
INSERT INTO callbacks.abc VALUES (110);
135+
INSERT INTO callbacks.abc VALUES (120);
136+
INSERT INTO callbacks.abc VALUES (130);
137+
INSERT INTO callbacks.abc VALUES (140);
138+
INSERT INTO callbacks.abc VALUES (150);
100139

140+
SELECT * FROM pathman_partition_list
141+
WHERE parent = 'callbacks.abc'::REGCLASS
142+
ORDER BY range_min::INT4;
143+
144+
DROP TABLE callbacks.abc CASCADE;
101145
DROP SCHEMA callbacks CASCADE;
102146
DROP EXTENSION pg_pathman CASCADE;

0 commit comments

Comments
 (0)