diff --git a/src/test/regress/expected/master_copy_shard_placement.out b/src/test/regress/expected/master_copy_shard_placement.out index b39be6d82..f8e37fa39 100644 --- a/src/test/regress/expected/master_copy_shard_placement.out +++ b/src/test/regress/expected/master_copy_shard_placement.out @@ -4,7 +4,7 @@ SET search_path TO mcsp; SET citus.next_shard_id TO 8139000; SET citus.shard_replication_factor TO 1; SET citus.replication_model TO 'statement'; -CREATE TABLE ref_table(a int); +CREATE TABLE ref_table(a int, b text unique); SELECT create_reference_table('ref_table'); create_reference_table --------------------------------------------------------------------- @@ -62,6 +62,18 @@ SELECT master_copy_shard_placement( 'localhost', :worker_2_port, do_repair := false); ERROR: shard xxxxx already exists in the target node +-- verify we error out if table has foreign key constraints +INSERT INTO ref_table SELECT 1, value FROM data; +ALTER TABLE data ADD CONSTRAINT distfk FOREIGN KEY (value) REFERENCES ref_table (b) MATCH FULL; +SELECT master_copy_shard_placement( + get_shard_id_for_distribution_column('data', 'key-1'), + 'localhost', :worker_2_port, + 'localhost', :worker_1_port, + do_repair := false); +ERROR: cannot create foreign key constraint +DETAIL: This shard has foreign constraints on it. Citus currently supports foreign key constraints only for "citus.shard_replication_factor = 1". +HINT: Please change "citus.shard_replication_factor to 1". To learn more about using foreign keys with other replication factors, please contact us at https://citusdata.com/about/contact_us. +ALTER TABLE data DROP CONSTRAINT distfk; -- replicate shard that contains key-1 SELECT master_copy_shard_placement( get_shard_id_for_distribution_column('data', 'key-1'), diff --git a/src/test/regress/sql/master_copy_shard_placement.sql b/src/test/regress/sql/master_copy_shard_placement.sql index dee374809..6d0f2234c 100644 --- a/src/test/regress/sql/master_copy_shard_placement.sql +++ b/src/test/regress/sql/master_copy_shard_placement.sql @@ -5,7 +5,7 @@ SET citus.next_shard_id TO 8139000; SET citus.shard_replication_factor TO 1; SET citus.replication_model TO 'statement'; -CREATE TABLE ref_table(a int); +CREATE TABLE ref_table(a int, b text unique); SELECT create_reference_table('ref_table'); CREATE TABLE data ( @@ -52,6 +52,18 @@ SELECT master_copy_shard_placement( 'localhost', :worker_2_port, do_repair := false); +-- verify we error out if table has foreign key constraints +INSERT INTO ref_table SELECT 1, value FROM data; + +ALTER TABLE data ADD CONSTRAINT distfk FOREIGN KEY (value) REFERENCES ref_table (b) MATCH FULL; +SELECT master_copy_shard_placement( + get_shard_id_for_distribution_column('data', 'key-1'), + 'localhost', :worker_2_port, + 'localhost', :worker_1_port, + do_repair := false); + +ALTER TABLE data DROP CONSTRAINT distfk; + -- replicate shard that contains key-1 SELECT master_copy_shard_placement( get_shard_id_for_distribution_column('data', 'key-1'),