From d611a50a8003fb4a86e1a978c4800547260631af Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Tue, 5 Apr 2022 12:21:52 +0200 Subject: [PATCH] Allow adding a unique constraint with an index --- .../distributed/relay/relay_event_utility.c | 2 +- .../multi_alter_table_add_constraints.out | 15 ++++++++++++++- .../sql/multi_alter_table_add_constraints.sql | 7 +++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/relay/relay_event_utility.c b/src/backend/distributed/relay/relay_event_utility.c index 1643f82c6..7388ff383 100644 --- a/src/backend/distributed/relay/relay_event_utility.c +++ b/src/backend/distributed/relay/relay_event_utility.c @@ -158,7 +158,7 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId) AccessShareLock, missingOk); - if (constraint->contype == CONSTR_PRIMARY && constraint->indexname) + if (constraint->indexname) { char **indexName = &(constraint->indexname); AppendShardIdToName(indexName, shardId); diff --git a/src/test/regress/expected/multi_alter_table_add_constraints.out b/src/test/regress/expected/multi_alter_table_add_constraints.out index 56ef04335..e96326c18 100644 --- a/src/test/regress/expected/multi_alter_table_add_constraints.out +++ b/src/test/regress/expected/multi_alter_table_add_constraints.out @@ -617,10 +617,23 @@ ORDER BY localhost | 57638 | t | (2 rows) +CREATE TABLE alter_add_unique(x int, y int); +CREATE UNIQUE INDEX CONCURRENTLY alter_unique_idx ON alter_add_unique(x); +SELECT create_distributed_table('alter_add_unique', 'x'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +ALTER TABLE alter_add_unique ADD CONSTRAINT unique_constraint_test UNIQUE USING INDEX alter_unique_idx; +NOTICE: ALTER TABLE / ADD CONSTRAINT USING INDEX will rename index "alter_unique_idx" to "unique_constraint_test" +ALTER TABLE alter_add_unique DROP CONSTRAINT unique_constraint_test; SET search_path TO 'public'; DROP SCHEMA sc1 CASCADE; NOTICE: drop cascades to table sc1.alter_add_prim_key DROP SCHEMA sc2 CASCADE; NOTICE: drop cascades to table sc2.alter_add_prim_key DROP SCHEMA sc3 CASCADE; -NOTICE: drop cascades to table sc3.alter_add_prim_key +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table sc3.alter_add_prim_key +drop cascades to table sc3.alter_add_unique diff --git a/src/test/regress/sql/multi_alter_table_add_constraints.sql b/src/test/regress/sql/multi_alter_table_add_constraints.sql index 3e80b09c0..612e4d22b 100644 --- a/src/test/regress/sql/multi_alter_table_add_constraints.sql +++ b/src/test/regress/sql/multi_alter_table_add_constraints.sql @@ -518,6 +518,13 @@ SELECT (run_command_on_workers($$ ORDER BY 1,2,3,4; +CREATE TABLE alter_add_unique(x int, y int); +CREATE UNIQUE INDEX CONCURRENTLY alter_unique_idx ON alter_add_unique(x); +SELECT create_distributed_table('alter_add_unique', 'x'); + +ALTER TABLE alter_add_unique ADD CONSTRAINT unique_constraint_test UNIQUE USING INDEX alter_unique_idx; +ALTER TABLE alter_add_unique DROP CONSTRAINT unique_constraint_test; + SET search_path TO 'public'; DROP SCHEMA sc1 CASCADE;