Test master_copy_shard_placement errors on foreign constraints

pull/3742/head
Hadi Moshayedi 2020-04-13 12:45:27 -07:00
parent f9de734329
commit 2639a9a19d
2 changed files with 26 additions and 2 deletions

View File

@ -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'),

View File

@ -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'),