summaryrefslogtreecommitdiff
path: root/src/test/regress/sql/constraints.sql
diff options
context:
space:
mode:
authorAlvaro Herrera2022-09-08 11:17:02 +0000
committerAlvaro Herrera2022-09-08 11:17:02 +0000
commite7936f8b3e57046c0e178ccefa04ac7e6fbae79c (patch)
tree92df8dea495bd37f8c7bdbe790957051a28d6f7e /src/test/regress/sql/constraints.sql
parentadb466150b44d1eaf43a2d22f58ff4c545a0ed3f (diff)
Choose FK name correctly during partition attachment
During ALTER TABLE ATTACH PARTITION, if the name of a parent's foreign key constraint is already used on the partition, the code tries to choose another one before the FK attributes list has been populated, so the resulting constraint name was "<relname>__fkey" instead of "<relname>_<attrs>_fkey". Repair, and add a test case. Backpatch to 12. In 11, the code to attach a partition was not smart enough to cope with conflicting constraint names, so the problem doesn't exist there. Author: Jehan-Guillaume de Rorthais <[email protected]> Discussion: https://postgr.es/m/20220901184156.738ebee5@karst
Diffstat (limited to 'src/test/regress/sql/constraints.sql')
-rw-r--r--src/test/regress/sql/constraints.sql19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/test/regress/sql/constraints.sql b/src/test/regress/sql/constraints.sql
index 833819a32e2..5ffcd4ffc7b 100644
--- a/src/test/regress/sql/constraints.sql
+++ b/src/test/regress/sql/constraints.sql
@@ -430,6 +430,25 @@ INSERT INTO parted_uniq_tbl VALUES (1); -- OK now, fail at commit
COMMIT;
DROP TABLE parted_uniq_tbl;
+-- test naming a constraint in a partition when a conflict exists
+CREATE TABLE parted_fk_naming (
+ id bigint NOT NULL default 1,
+ id_abc bigint,
+ CONSTRAINT dummy_constr FOREIGN KEY (id_abc)
+ REFERENCES parted_fk_naming (id),
+ PRIMARY KEY (id)
+)
+PARTITION BY LIST (id);
+CREATE TABLE parted_fk_naming_1 (
+ id bigint NOT NULL default 1,
+ id_abc bigint,
+ PRIMARY KEY (id),
+ CONSTRAINT dummy_constr CHECK (true)
+);
+ALTER TABLE parted_fk_naming ATTACH PARTITION parted_fk_naming_1 FOR VALUES IN ('1');
+SELECT conname FROM pg_constraint WHERE conrelid = 'parted_fk_naming_1'::regclass AND contype = 'f';
+DROP TABLE parted_fk_naming;
+
-- test a HOT update that invalidates the conflicting tuple.
-- the trigger should still fire and catch the violation