33CREATE EXTENSION pg_pathman;
44CREATE SCHEMA callbacks ;
55
6- /* Check callbacks */
76
7+
8+ /* callback #1 */
89CREATE OR REPLACE FUNCTION callbacks .abc_on_part_created_callback(args JSONB)
910RETURNS VOID AS $$
1011BEGIN
1112 RAISE WARNING ' callback arg: %' , args::TEXT ;
1213END
1314$$ language plpgsql;
1415
15-
16-
17- /* callback is in public namespace, must be schema-qualified */
16+ /* callback #2 */
1817CREATE OR REPLACE FUNCTION public .dummy_cb(args JSONB)
1918RETURNS VOID AS $$
2019BEGIN
2120END
2221$$ language plpgsql;
2322
23+
24+
2425CREATE TABLE callbacks .abc(a serial , b int );
2526SELECT create_range_partitions(' callbacks.abc' , ' a' , 1 , 100 , 2 );
2627
@@ -78,25 +79,25 @@ SELECT create_hash_partitions('callbacks.abc', 'a', 5);
7879
7980DROP TABLE callbacks .abc CASCADE;
8081
82+
8183/* test the temprary deletion of callback function */
8284CREATE TABLE callbacks .abc(a serial , b int );
8385SELECT set_init_callback(' callbacks.abc' ,
8486 ' callbacks.abc_on_part_created_callback(jsonb)' );
8587SELECT create_range_partitions(' callbacks.abc' , ' a' , 1 , 100 , 2 );
8688
8789INSERT INTO callbacks .abc VALUES (201 , 0 ); /* +1 new partition */
90+
91+ BEGIN ;
8892DROP FUNCTION callbacks .abc_on_part_created_callback (jsonb);
8993INSERT INTO callbacks .abc VALUES (301 , 0 ); /* +0 new partitions (ERROR) */
90- CREATE OR REPLACE FUNCTION callbacks .abc_on_part_created_callback(args JSONB)
91- RETURNS VOID AS $$
92- BEGIN
93- RAISE WARNING ' callback arg: %' , args::TEXT ;
94- END
95- $$ language plpgsql;
94+ ROLLBACK ;
95+
9696INSERT INTO callbacks .abc VALUES (301 , 0 ); /* +1 new partition */
9797
9898DROP TABLE callbacks .abc CASCADE;
9999
100+
100101/* more complex test using rotation of tables */
101102CREATE TABLE callbacks .abc(a INT4 NOT NULL );
102103INSERT INTO callbacks .abc
@@ -107,22 +108,22 @@ CREATE OR REPLACE FUNCTION callbacks.rotation_callback(params jsonb)
107108RETURNS VOID AS
108109$$
109110DECLARE
110- relation regclass;
111+ relation regclass;
111112 parent_rel regclass;
112113BEGIN
113114 parent_rel := concat(params- >> ' partition_schema' , ' .' , params- >> ' parent' )::regclass;
114115
115- -- drop "old" partitions
116- FOR relation IN (SELECT partition FROM
116+ -- drop "old" partitions
117+ FOR relation IN (SELECT partition FROM
117118 (SELECT partition, range_min::INT4 FROM pathman_partition_list
118119 WHERE parent = parent_rel
119120 ORDER BY range_min::INT4 DESC
120121 OFFSET 4 ) t -- remain 4 last partitions
121122 ORDER BY range_min)
122- LOOP
123- RAISE NOTICE ' dropping partition %' , relation;
124- PERFORM drop_range_partition(relation);
125- END LOOP;
123+ LOOP
124+ RAISE NOTICE ' dropping partition %' , relation;
125+ PERFORM drop_range_partition(relation);
126+ END LOOP;
126127END
127128$$ LANGUAGE plpgsql;
128129
@@ -140,6 +141,8 @@ SELECT * FROM pathman_partition_list
140141WHERE parent = ' callbacks.abc' ::REGCLASS
141142ORDER BY range_min::INT4;
142143
144+
145+
143146DROP TABLE callbacks .abc CASCADE;
144147DROP SCHEMA callbacks CASCADE;
145148DROP EXTENSION pg_pathman CASCADE;
0 commit comments