From eed4c913ed940b45752969833eb38ae014def1e5 Mon Sep 17 00:00:00 2001 From: Ahmet Gedemenli Date: Thu, 21 Oct 2021 20:06:08 +0300 Subject: [PATCH] Add test for undistributed partitioned table --- .../expected/auto_undist_citus_local.out | 69 ++++++++++++++++++- .../regress/sql/auto_undist_citus_local.sql | 38 ++++++++++ 2 files changed, 104 insertions(+), 3 deletions(-) diff --git a/src/test/regress/expected/auto_undist_citus_local.out b/src/test/regress/expected/auto_undist_citus_local.out index 20739bd26..763b3f91e 100644 --- a/src/test/regress/expected/auto_undist_citus_local.out +++ b/src/test/regress/expected/auto_undist_citus_local.out @@ -531,6 +531,69 @@ SELECT logicalrelid, autoconverted FROM pg_dist_partition auto_local_table_2 | f (2 rows) +-- test with partitioned tables +CREATE TABLE partitioned_table_1 (a int unique) partition by range(a); +CREATE TABLE partitioned_table_1_1 partition of partitioned_table_1 FOR VALUES FROM (0) TO (10); +CREATE TABLE partitioned_table_2 (a int unique) partition by range(a); +CREATE TABLE partitioned_table_2_1 partition of partitioned_table_2 FOR VALUES FROM (0) TO (10); +CREATE TABLE ref_fkey_to_partitioned (a int unique references partitioned_table_1(a), b int unique references partitioned_table_2(a)); +SELECT create_reference_table('ref_fkey_to_partitioned'); + create_reference_table +--------------------------------------------------------------------- + +(1 row) + +-- verify that partitioned tables and partitions are converted automatically +SELECT logicalrelid, autoconverted FROM pg_dist_partition + WHERE logicalrelid IN ('partitioned_table_1'::regclass, + 'partitioned_table_1_1'::regclass, + 'partitioned_table_2'::regclass, + 'partitioned_table_2_1'::regclass) + ORDER BY logicalrelid; + logicalrelid | autoconverted +--------------------------------------------------------------------- + partitioned_table_1_1 | t + partitioned_table_1 | t + partitioned_table_2_1 | t + partitioned_table_2 | t +(4 rows) + +BEGIN; + SELECT citus_add_local_table_to_metadata('partitioned_table_2'); + citus_add_local_table_to_metadata +--------------------------------------------------------------------- + +(1 row) + + -- verify that they are now marked as auto-converted = false + SELECT logicalrelid, autoconverted FROM pg_dist_partition + WHERE logicalrelid IN ('partitioned_table_1'::regclass, + 'partitioned_table_1_1'::regclass, + 'partitioned_table_2'::regclass, + 'partitioned_table_2_1'::regclass) + ORDER BY logicalrelid; + logicalrelid | autoconverted +--------------------------------------------------------------------- + partitioned_table_1_1 | f + partitioned_table_1 | f + partitioned_table_2_1 | f + partitioned_table_2 | f +(4 rows) + +ROLLBACK; +-- now they should be undistributed +DROP TABLE ref_fkey_to_partitioned; +-- verify that they are undistributed +SELECT logicalrelid, autoconverted FROM pg_dist_partition + WHERE logicalrelid IN ('partitioned_table_1'::regclass, + 'partitioned_table_1_1'::regclass, + 'partitioned_table_2'::regclass, + 'partitioned_table_2_1'::regclass) + ORDER BY logicalrelid; + logicalrelid | autoconverted +--------------------------------------------------------------------- +(0 rows) + -- a single drop table cascades into multiple undistributes DROP TABLE IF EXISTS citus_local_table_1, citus_local_table_2, citus_local_table_3, citus_local_table_2, reference_table_1; CREATE TABLE reference_table_1(r1 int UNIQUE, r2 int); @@ -568,9 +631,9 @@ ALTER TABLE reference_table_1 OWNER TO another_user; SELECT run_command_on_placements('reference_table_1', 'ALTER TABLE %s OWNER TO another_user'); run_command_on_placements --------------------------------------------------------------------- - (localhost,57636,1810045,t,"ALTER TABLE") - (localhost,57637,1810045,t,"ALTER TABLE") - (localhost,57638,1810045,t,"ALTER TABLE") + (localhost,57636,1810050,t,"ALTER TABLE") + (localhost,57637,1810050,t,"ALTER TABLE") + (localhost,57638,1810050,t,"ALTER TABLE") (3 rows) SET citus.enable_ddl_propagation to ON; diff --git a/src/test/regress/sql/auto_undist_citus_local.sql b/src/test/regress/sql/auto_undist_citus_local.sql index 413b83bf0..2bd1b7e4d 100644 --- a/src/test/regress/sql/auto_undist_citus_local.sql +++ b/src/test/regress/sql/auto_undist_citus_local.sql @@ -249,6 +249,44 @@ SELECT logicalrelid, autoconverted FROM pg_dist_partition 'auto_local_table_2'::regclass) ORDER BY logicalrelid; +-- test with partitioned tables +CREATE TABLE partitioned_table_1 (a int unique) partition by range(a); +CREATE TABLE partitioned_table_1_1 partition of partitioned_table_1 FOR VALUES FROM (0) TO (10); +CREATE TABLE partitioned_table_2 (a int unique) partition by range(a); +CREATE TABLE partitioned_table_2_1 partition of partitioned_table_2 FOR VALUES FROM (0) TO (10); +CREATE TABLE ref_fkey_to_partitioned (a int unique references partitioned_table_1(a), b int unique references partitioned_table_2(a)); +SELECT create_reference_table('ref_fkey_to_partitioned'); + +-- verify that partitioned tables and partitions are converted automatically +SELECT logicalrelid, autoconverted FROM pg_dist_partition + WHERE logicalrelid IN ('partitioned_table_1'::regclass, + 'partitioned_table_1_1'::regclass, + 'partitioned_table_2'::regclass, + 'partitioned_table_2_1'::regclass) + ORDER BY logicalrelid; + +BEGIN; + SELECT citus_add_local_table_to_metadata('partitioned_table_2'); + + -- verify that they are now marked as auto-converted = false + SELECT logicalrelid, autoconverted FROM pg_dist_partition + WHERE logicalrelid IN ('partitioned_table_1'::regclass, + 'partitioned_table_1_1'::regclass, + 'partitioned_table_2'::regclass, + 'partitioned_table_2_1'::regclass) + ORDER BY logicalrelid; +ROLLBACK; + +-- now they should be undistributed +DROP TABLE ref_fkey_to_partitioned; +-- verify that they are undistributed +SELECT logicalrelid, autoconverted FROM pg_dist_partition + WHERE logicalrelid IN ('partitioned_table_1'::regclass, + 'partitioned_table_1_1'::regclass, + 'partitioned_table_2'::regclass, + 'partitioned_table_2_1'::regclass) + ORDER BY logicalrelid; + -- a single drop table cascades into multiple undistributes DROP TABLE IF EXISTS citus_local_table_1, citus_local_table_2, citus_local_table_3, citus_local_table_2, reference_table_1; CREATE TABLE reference_table_1(r1 int UNIQUE, r2 int);