Skip to content

Commit e133699

Browse files
committed
add 'pathman_bgw' regression test
1 parent 5de8506 commit e133699

File tree

7 files changed

+182
-9
lines changed

7 files changed

+182
-9
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ PGFILEDESC = "pg_pathman - partitioning tool"
2222

2323
REGRESS = pathman_basic \
2424
pathman_cte \
25+
pathman_bgw \
26+
pathman_inserts \
2527
pathman_domains \
2628
pathman_interval \
2729
pathman_callbacks \
2830
pathman_foreign_keys \
2931
pathman_permissions \
3032
pathman_rowmarks \
31-
pathman_inserts \
3233
pathman_runtime_nodes \
3334
pathman_utility_stmt_hooking \
3435
pathman_calamity

expected/pathman_bgw.out

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
\set VERBOSITY terse
2+
SET search_path = 'public';
3+
CREATE EXTENSION pg_pathman;
4+
CREATE SCHEMA test_bgw;
5+
/*
6+
* Tests for SpawnPartitionsWorker
7+
*/
8+
/* int4, size of Datum == 4 */
9+
CREATE TABLE test_bgw.test_1(val INT4 NOT NULL);
10+
SELECT create_range_partitions('test_bgw.test_1', 'val', 1, 5, 2);
11+
NOTICE: sequence "test_1_seq" does not exist, skipping
12+
create_range_partitions
13+
-------------------------
14+
2
15+
(1 row)
16+
17+
SELECT set_spawn_using_bgw('test_bgw.test_1', true);
18+
set_spawn_using_bgw
19+
---------------------
20+
21+
(1 row)
22+
23+
INSERT INTO test_bgw.test_1 VALUES (11);
24+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
25+
parent | partition | parttype | partattr | range_min | range_max
26+
-----------------+-------------------+----------+----------+-----------+-----------
27+
test_bgw.test_1 | test_bgw.test_1_1 | 2 | val | 1 | 6
28+
test_bgw.test_1 | test_bgw.test_1_2 | 2 | val | 6 | 11
29+
test_bgw.test_1 | test_bgw.test_1_3 | 2 | val | 11 | 16
30+
(3 rows)
31+
32+
DROP TABLE test_bgw.test_1 CASCADE;
33+
NOTICE: drop cascades to 3 other objects
34+
/* int8, size of Datum == 8 */
35+
CREATE TABLE test_bgw.test_2(val INT8 NOT NULL);
36+
SELECT create_range_partitions('test_bgw.test_2', 'val', 1, 5, 2);
37+
NOTICE: sequence "test_2_seq" does not exist, skipping
38+
create_range_partitions
39+
-------------------------
40+
2
41+
(1 row)
42+
43+
SELECT set_spawn_using_bgw('test_bgw.test_2', true);
44+
set_spawn_using_bgw
45+
---------------------
46+
47+
(1 row)
48+
49+
INSERT INTO test_bgw.test_2 VALUES (11);
50+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
51+
parent | partition | parttype | partattr | range_min | range_max
52+
-----------------+-------------------+----------+----------+-----------+-----------
53+
test_bgw.test_2 | test_bgw.test_2_1 | 2 | val | 1 | 6
54+
test_bgw.test_2 | test_bgw.test_2_2 | 2 | val | 6 | 11
55+
test_bgw.test_2 | test_bgw.test_2_3 | 2 | val | 11 | 16
56+
(3 rows)
57+
58+
DROP TABLE test_bgw.test_2 CASCADE;
59+
NOTICE: drop cascades to 3 other objects
60+
/* numeric, size of Datum == var */
61+
CREATE TABLE test_bgw.test_3(val NUMERIC NOT NULL);
62+
SELECT create_range_partitions('test_bgw.test_3', 'val', 1, 5, 2);
63+
NOTICE: sequence "test_3_seq" does not exist, skipping
64+
create_range_partitions
65+
-------------------------
66+
2
67+
(1 row)
68+
69+
SELECT set_spawn_using_bgw('test_bgw.test_3', true);
70+
set_spawn_using_bgw
71+
---------------------
72+
73+
(1 row)
74+
75+
INSERT INTO test_bgw.test_3 VALUES (11);
76+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
77+
parent | partition | parttype | partattr | range_min | range_max
78+
-----------------+-------------------+----------+----------+-----------+-----------
79+
test_bgw.test_3 | test_bgw.test_3_1 | 2 | val | 1 | 6
80+
test_bgw.test_3 | test_bgw.test_3_2 | 2 | val | 6 | 11
81+
test_bgw.test_3 | test_bgw.test_3_3 | 2 | val | 11 | 16
82+
(3 rows)
83+
84+
DROP TABLE test_bgw.test_3 CASCADE;
85+
NOTICE: drop cascades to 3 other objects
86+
/* date, size of Datum == var */
87+
CREATE TABLE test_bgw.test_4(val DATE NOT NULL);
88+
SELECT create_range_partitions('test_bgw.test_4', 'val', '20170213'::date, '1 day'::interval, 2);
89+
NOTICE: sequence "test_4_seq" does not exist, skipping
90+
create_range_partitions
91+
-------------------------
92+
2
93+
(1 row)
94+
95+
SELECT set_spawn_using_bgw('test_bgw.test_4', true);
96+
set_spawn_using_bgw
97+
---------------------
98+
99+
(1 row)
100+
101+
INSERT INTO test_bgw.test_4 VALUES ('20170215');
102+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
103+
parent | partition | parttype | partattr | range_min | range_max
104+
-----------------+-------------------+----------+----------+------------+------------
105+
test_bgw.test_4 | test_bgw.test_4_1 | 2 | val | 02-13-2017 | 02-14-2017
106+
test_bgw.test_4 | test_bgw.test_4_2 | 2 | val | 02-14-2017 | 02-15-2017
107+
test_bgw.test_4 | test_bgw.test_4_3 | 2 | val | 02-15-2017 | 02-16-2017
108+
(3 rows)
109+
110+
DROP TABLE test_bgw.test_4 CASCADE;
111+
NOTICE: drop cascades to 3 other objects
112+
DROP SCHEMA test_bgw CASCADE;
113+
NOTICE: drop cascades to 4 other objects
114+
DROP EXTENSION pg_pathman;

expected/pathman_callbacks.out

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,18 @@ WARNING: callback arg: {"parent": "abc", "parttype": "2", "partition": "abc_2",
184184
2
185185
(1 row)
186186

187-
INSERT INTO callbacks.abc VALUES (201, 0);
187+
INSERT INTO callbacks.abc VALUES (201, 0); /* +1 new partition */
188188
WARNING: callback arg: {"parent": "abc", "parttype": "2", "partition": "abc_3", "range_max": "301", "range_min": "201", "parent_schema": "callbacks", "partition_schema": "callbacks"}
189189
DROP FUNCTION callbacks.abc_on_part_created_callback(jsonb);
190-
INSERT INTO callbacks.abc VALUES (301, 0);
190+
INSERT INTO callbacks.abc VALUES (301, 0); /* +0 new partitions (ERROR) */
191191
ERROR: callback function "callbacks.abc_on_part_created_callback(jsonb)" does not exist
192192
CREATE OR REPLACE FUNCTION callbacks.abc_on_part_created_callback(args JSONB)
193193
RETURNS VOID AS $$
194194
BEGIN
195195
RAISE WARNING 'callback arg: %', args::TEXT;
196196
END
197197
$$ language plpgsql;
198-
INSERT INTO callbacks.abc VALUES (301, 0);
198+
INSERT INTO callbacks.abc VALUES (301, 0); /* +1 new partition */
199199
WARNING: callback arg: {"parent": "abc", "parttype": "2", "partition": "abc_5", "range_max": "401", "range_min": "301", "parent_schema": "callbacks", "partition_schema": "callbacks"}
200200
DROP TABLE callbacks.abc CASCADE;
201201
NOTICE: drop cascades to 4 other objects

expected/pathman_inserts.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ CREATE TRIGGER print_new_row_before_insert BEFORE INSERT ON test_inserts.storage
3131
FOR EACH ROW EXECUTE PROCEDURE test_inserts.print_cols_before_change();
3232
CREATE TRIGGER print_new_row_after_insert AFTER INSERT ON test_inserts.storage_1
3333
FOR EACH ROW EXECUTE PROCEDURE test_inserts.print_cols_after_change();
34-
/* set partition init callback */
34+
/* set partition init callback that will add triggers to partitions */
3535
CREATE OR REPLACE FUNCTION test_inserts.set_triggers(args jsonb) RETURNS VOID AS $$
3636
BEGIN
3737
EXECUTE format('create trigger print_new_row_before_insert before insert on %s.%s

sql/pathman_bgw.sql

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
\set VERBOSITY terse
2+
3+
SET search_path = 'public';
4+
CREATE EXTENSION pg_pathman;
5+
CREATE SCHEMA test_bgw;
6+
7+
8+
/*
9+
* Tests for SpawnPartitionsWorker
10+
*/
11+
12+
/* int4, size of Datum == 4 */
13+
CREATE TABLE test_bgw.test_1(val INT4 NOT NULL);
14+
SELECT create_range_partitions('test_bgw.test_1', 'val', 1, 5, 2);
15+
16+
SELECT set_spawn_using_bgw('test_bgw.test_1', true);
17+
INSERT INTO test_bgw.test_1 VALUES (11);
18+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
19+
20+
DROP TABLE test_bgw.test_1 CASCADE;
21+
22+
23+
/* int8, size of Datum == 8 */
24+
CREATE TABLE test_bgw.test_2(val INT8 NOT NULL);
25+
SELECT create_range_partitions('test_bgw.test_2', 'val', 1, 5, 2);
26+
27+
SELECT set_spawn_using_bgw('test_bgw.test_2', true);
28+
INSERT INTO test_bgw.test_2 VALUES (11);
29+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
30+
31+
DROP TABLE test_bgw.test_2 CASCADE;
32+
33+
34+
/* numeric, size of Datum == var */
35+
CREATE TABLE test_bgw.test_3(val NUMERIC NOT NULL);
36+
SELECT create_range_partitions('test_bgw.test_3', 'val', 1, 5, 2);
37+
38+
SELECT set_spawn_using_bgw('test_bgw.test_3', true);
39+
INSERT INTO test_bgw.test_3 VALUES (11);
40+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
41+
42+
DROP TABLE test_bgw.test_3 CASCADE;
43+
44+
45+
/* date, size of Datum == var */
46+
CREATE TABLE test_bgw.test_4(val DATE NOT NULL);
47+
SELECT create_range_partitions('test_bgw.test_4', 'val', '20170213'::date, '1 day'::interval, 2);
48+
49+
SELECT set_spawn_using_bgw('test_bgw.test_4', true);
50+
INSERT INTO test_bgw.test_4 VALUES ('20170215');
51+
SELECT * FROM pathman_partition_list ORDER BY partition; /* should contain 3 partitions */
52+
53+
DROP TABLE test_bgw.test_4 CASCADE;
54+
55+
56+
57+
DROP SCHEMA test_bgw CASCADE;
58+
DROP EXTENSION pg_pathman;

sql/pathman_callbacks.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,16 @@ SELECT set_init_callback('callbacks.abc',
8484
'callbacks.abc_on_part_created_callback(jsonb)');
8585
SELECT create_range_partitions('callbacks.abc', 'a', 1, 100, 2);
8686

87-
INSERT INTO callbacks.abc VALUES (201, 0);
87+
INSERT INTO callbacks.abc VALUES (201, 0); /* +1 new partition */
8888
DROP FUNCTION callbacks.abc_on_part_created_callback(jsonb);
89-
INSERT INTO callbacks.abc VALUES (301, 0);
89+
INSERT INTO callbacks.abc VALUES (301, 0); /* +0 new partitions (ERROR) */
9090
CREATE OR REPLACE FUNCTION callbacks.abc_on_part_created_callback(args JSONB)
9191
RETURNS VOID AS $$
9292
BEGIN
9393
RAISE WARNING 'callback arg: %', args::TEXT;
9494
END
9595
$$ language plpgsql;
96-
INSERT INTO callbacks.abc VALUES (301, 0);
96+
INSERT INTO callbacks.abc VALUES (301, 0); /* +1 new partition */
9797

9898
DROP TABLE callbacks.abc CASCADE;
9999

sql/pathman_inserts.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ CREATE TRIGGER print_new_row_before_insert BEFORE INSERT ON test_inserts.storage
3333
CREATE TRIGGER print_new_row_after_insert AFTER INSERT ON test_inserts.storage_1
3434
FOR EACH ROW EXECUTE PROCEDURE test_inserts.print_cols_after_change();
3535

36-
/* set partition init callback */
36+
/* set partition init callback that will add triggers to partitions */
3737
CREATE OR REPLACE FUNCTION test_inserts.set_triggers(args jsonb) RETURNS VOID AS $$
3838
BEGIN
3939
EXECUTE format('create trigger print_new_row_before_insert before insert on %s.%s

0 commit comments

Comments
 (0)