Skip to content

Commit c871c0b

Browse files
committed
add pathman_rebuild_deletes test suite
1 parent dde913b commit c871c0b

File tree

3 files changed

+157
-0
lines changed

3 files changed

+157
-0
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ REGRESS = pathman_array_qual \
5050
pathman_only \
5151
pathman_param_upd_del \
5252
pathman_permissions \
53+
pathman_rebuild_deletes \
5354
pathman_rebuild_updates \
5455
pathman_rowmarks \
5556
pathman_runtime_nodes \

expected/pathman_rebuild_deletes.out

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
\set VERBOSITY terse
2+
SET search_path = 'public';
3+
CREATE EXTENSION pg_pathman;
4+
CREATE SCHEMA test_deletes;
5+
/*
6+
* Test DELETEs on a partition with different TupleDescriptor.
7+
*/
8+
/* create partitioned table */
9+
CREATE TABLE test_deletes.test(a FLOAT4, val INT4 NOT NULL, b FLOAT8);
10+
INSERT INTO test_deletes.test SELECT i, i, i FROM generate_series(1, 100) AS i;
11+
SELECT create_range_partitions('test_deletes.test', 'val', 1, 10);
12+
create_range_partitions
13+
-------------------------
14+
10
15+
(1 row)
16+
17+
/* drop column 'a' */
18+
ALTER TABLE test_deletes.test DROP COLUMN a;
19+
/* append new partition */
20+
SELECT append_range_partition('test_deletes.test');
21+
append_range_partition
22+
------------------------
23+
test_deletes.test_11
24+
(1 row)
25+
26+
INSERT INTO test_deletes.test_11 (val, b) VALUES (101, 10);
27+
VACUUM ANALYZE;
28+
/* tuple descs are the same */
29+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test WHERE val = 1;
30+
QUERY PLAN
31+
---------------------------
32+
Delete on test_1
33+
-> Seq Scan on test_1
34+
Filter: (val = 1)
35+
(3 rows)
36+
37+
DELETE FROM test_deletes.test WHERE val = 1 RETURNING *, tableoid::REGCLASS;
38+
val | b | tableoid
39+
-----+---+---------------------
40+
1 | 1 | test_deletes.test_1
41+
(1 row)
42+
43+
/* tuple descs are different */
44+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test WHERE val = 101;
45+
QUERY PLAN
46+
-----------------------------
47+
Delete on test_11
48+
-> Seq Scan on test_11
49+
Filter: (val = 101)
50+
(3 rows)
51+
52+
DELETE FROM test_deletes.test WHERE val = 101 RETURNING *, tableoid::REGCLASS;
53+
val | b | tableoid
54+
-----+----+----------------------
55+
101 | 10 | test_deletes.test_11
56+
(1 row)
57+
58+
CREATE TABLE test_deletes.test_dummy (val INT4);
59+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test
60+
WHERE val = 101 AND val = ANY (TABLE test_deletes.test_dummy)
61+
RETURNING *, tableoid::REGCLASS;
62+
QUERY PLAN
63+
------------------------------------
64+
Delete on test_11
65+
-> Nested Loop Semi Join
66+
-> Seq Scan on test_11
67+
Filter: (val = 101)
68+
-> Seq Scan on test_dummy
69+
Filter: (val = 101)
70+
(6 rows)
71+
72+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test t1
73+
USING test_deletes.test_dummy t2
74+
WHERE t1.val = 101 AND t1.val = t2.val
75+
RETURNING t1.*, t1.tableoid::REGCLASS;
76+
QUERY PLAN
77+
---------------------------------------
78+
Delete on test_11 t1
79+
-> Nested Loop
80+
-> Seq Scan on test_11 t1
81+
Filter: (val = 101)
82+
-> Seq Scan on test_dummy t2
83+
Filter: (val = 101)
84+
(6 rows)
85+
86+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test
87+
WHERE val = 101 AND test >= (100, 8)
88+
RETURNING *, tableoid::REGCLASS;
89+
QUERY PLAN
90+
-----------------------------------------------------------------------------------
91+
Delete on test_11
92+
-> Seq Scan on test_11
93+
Filter: (((test_11.*)::test_deletes.test >= ROW(100, 8)) AND (val = 101))
94+
(3 rows)
95+
96+
DROP TABLE test_deletes.test_dummy;
97+
DROP SCHEMA test_deletes CASCADE;
98+
NOTICE: drop cascades to 13 other objects
99+
DROP EXTENSION pg_pathman;

sql/pathman_rebuild_deletes.sql

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
\set VERBOSITY terse
2+
3+
SET search_path = 'public';
4+
CREATE EXTENSION pg_pathman;
5+
CREATE SCHEMA test_deletes;
6+
7+
8+
/*
9+
* Test DELETEs on a partition with different TupleDescriptor.
10+
*/
11+
12+
/* create partitioned table */
13+
CREATE TABLE test_deletes.test(a FLOAT4, val INT4 NOT NULL, b FLOAT8);
14+
INSERT INTO test_deletes.test SELECT i, i, i FROM generate_series(1, 100) AS i;
15+
SELECT create_range_partitions('test_deletes.test', 'val', 1, 10);
16+
17+
/* drop column 'a' */
18+
ALTER TABLE test_deletes.test DROP COLUMN a;
19+
20+
/* append new partition */
21+
SELECT append_range_partition('test_deletes.test');
22+
INSERT INTO test_deletes.test_11 (val, b) VALUES (101, 10);
23+
24+
25+
VACUUM ANALYZE;
26+
27+
28+
/* tuple descs are the same */
29+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test WHERE val = 1;
30+
DELETE FROM test_deletes.test WHERE val = 1 RETURNING *, tableoid::REGCLASS;
31+
32+
33+
/* tuple descs are different */
34+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test WHERE val = 101;
35+
DELETE FROM test_deletes.test WHERE val = 101 RETURNING *, tableoid::REGCLASS;
36+
37+
CREATE TABLE test_deletes.test_dummy (val INT4);
38+
39+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test
40+
WHERE val = 101 AND val = ANY (TABLE test_deletes.test_dummy)
41+
RETURNING *, tableoid::REGCLASS;
42+
43+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test t1
44+
USING test_deletes.test_dummy t2
45+
WHERE t1.val = 101 AND t1.val = t2.val
46+
RETURNING t1.*, t1.tableoid::REGCLASS;
47+
48+
EXPLAIN (COSTS OFF) DELETE FROM test_deletes.test
49+
WHERE val = 101 AND test >= (100, 8)
50+
RETURNING *, tableoid::REGCLASS;
51+
52+
DROP TABLE test_deletes.test_dummy;
53+
54+
55+
56+
DROP SCHEMA test_deletes CASCADE;
57+
DROP EXTENSION pg_pathman;

0 commit comments

Comments
 (0)