@@ -198,6 +198,89 @@ INSERT INTO callbacks.abc VALUES (301, 0); /* +1 new partition */
198198WARNING: callback arg: {"parent": "abc", "parttype": "2", "partition": "abc_5", "range_max": "401", "range_min": "301", "parent_schema": "callbacks", "partition_schema": "callbacks"}
199199DROP TABLE callbacks.abc CASCADE;
200200NOTICE: 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
201284DROP SCHEMA callbacks CASCADE;
202- NOTICE: drop cascades to 2 other objects
285+ NOTICE: drop cascades to 3 other objects
203286DROP EXTENSION pg_pathman CASCADE;
0 commit comments