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