3
3
CREATE EXTENSION pg_pathman;
4
4
CREATE SCHEMA callbacks ;
5
5
6
- /* Check callbacks */
7
6
7
+
8
+ /* callback #1 */
8
9
CREATE OR REPLACE FUNCTION callbacks .abc_on_part_created_callback(args JSONB)
9
10
RETURNS VOID AS $$
10
11
BEGIN
11
12
RAISE WARNING ' callback arg: %' , args::TEXT ;
12
13
END
13
14
$$ language plpgsql;
14
15
15
-
16
-
17
- /* callback is in public namespace, must be schema-qualified */
16
+ /* callback #2 */
18
17
CREATE OR REPLACE FUNCTION public .dummy_cb(args JSONB)
19
18
RETURNS VOID AS $$
20
19
BEGIN
21
20
END
22
21
$$ language plpgsql;
23
22
23
+
24
+
24
25
CREATE TABLE callbacks .abc(a serial , b int );
25
26
SELECT create_range_partitions(' callbacks.abc' , ' a' , 1 , 100 , 2 );
26
27
@@ -78,25 +79,25 @@ SELECT create_hash_partitions('callbacks.abc', 'a', 5);
78
79
79
80
DROP TABLE callbacks .abc CASCADE;
80
81
82
+
81
83
/* test the temprary deletion of callback function */
82
84
CREATE TABLE callbacks .abc(a serial , b int );
83
85
SELECT set_init_callback(' callbacks.abc' ,
84
86
' callbacks.abc_on_part_created_callback(jsonb)' );
85
87
SELECT create_range_partitions(' callbacks.abc' , ' a' , 1 , 100 , 2 );
86
88
87
89
INSERT INTO callbacks .abc VALUES (201 , 0 ); /* +1 new partition */
90
+
91
+ BEGIN ;
88
92
DROP FUNCTION callbacks .abc_on_part_created_callback (jsonb);
89
93
INSERT 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
+
96
96
INSERT INTO callbacks .abc VALUES (301 , 0 ); /* +1 new partition */
97
97
98
98
DROP TABLE callbacks .abc CASCADE;
99
99
100
+
100
101
/* more complex test using rotation of tables */
101
102
CREATE TABLE callbacks .abc(a INT4 NOT NULL );
102
103
INSERT INTO callbacks .abc
@@ -107,22 +108,22 @@ CREATE OR REPLACE FUNCTION callbacks.rotation_callback(params jsonb)
107
108
RETURNS VOID AS
108
109
$$
109
110
DECLARE
110
- relation regclass;
111
+ relation regclass;
111
112
parent_rel regclass;
112
113
BEGIN
113
114
parent_rel := concat(params- >> ' partition_schema' , ' .' , params- >> ' parent' )::regclass;
114
115
115
- -- drop "old" partitions
116
- FOR relation IN (SELECT partition FROM
116
+ -- drop "old" partitions
117
+ FOR relation IN (SELECT partition FROM
117
118
(SELECT partition, range_min::INT4 FROM pathman_partition_list
118
119
WHERE parent = parent_rel
119
120
ORDER BY range_min::INT4 DESC
120
121
OFFSET 4 ) t -- remain 4 last partitions
121
122
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;
126
127
END
127
128
$$ LANGUAGE plpgsql;
128
129
@@ -140,6 +141,8 @@ SELECT * FROM pathman_partition_list
140
141
WHERE parent = ' callbacks.abc' ::REGCLASS
141
142
ORDER BY range_min::INT4;
142
143
144
+
145
+
143
146
DROP TABLE callbacks .abc CASCADE;
144
147
DROP SCHEMA callbacks CASCADE;
145
148
DROP EXTENSION pg_pathman CASCADE;
0 commit comments