Improve two error messages related to foreign keys on partitioned tables
Error messages for creating a foreign key on a partitioned table using ONLY or NOT VALID were wrong in mentioning the objects they worked on. This commit adds on the way some regression tests missing for those cases. Author: Laurenz Albe Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/c11c05810a9ed65e9b2c817a9ef442275a32fe80.camel@cybertec.at
This commit is contained in:
parent
4d7c74039f
commit
c8ed820c68
@ -7334,12 +7334,14 @@ ATAddForeignKeyConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel,
|
|||||||
if (!recurse)
|
if (!recurse)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||||
errmsg("foreign key referencing partitioned table \"%s\" must not be ONLY",
|
errmsg("cannot use ONLY for foreign key on partitioned table \"%s\" referencing relation \"%s\"",
|
||||||
|
RelationGetRelationName(rel),
|
||||||
RelationGetRelationName(pkrel))));
|
RelationGetRelationName(pkrel))));
|
||||||
if (fkconstraint->skip_validation && !fkconstraint->initially_valid)
|
if (fkconstraint->skip_validation && !fkconstraint->initially_valid)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||||
errmsg("cannot add NOT VALID foreign key to relation \"%s\"",
|
errmsg("cannot add NOT VALID foreign key on partitioned table \"%s\" referencing relation \"%s\"",
|
||||||
|
RelationGetRelationName(rel),
|
||||||
RelationGetRelationName(pkrel)),
|
RelationGetRelationName(pkrel)),
|
||||||
errdetail("This feature is not yet supported on partitioned tables.")));
|
errdetail("This feature is not yet supported on partitioned tables.")));
|
||||||
}
|
}
|
||||||
|
@ -1465,6 +1465,17 @@ CREATE TABLE fk_partitioned_fk_3_0 PARTITION OF fk_partitioned_fk_3 FOR VALUES W
|
|||||||
CREATE TABLE fk_partitioned_fk_3_1 PARTITION OF fk_partitioned_fk_3 FOR VALUES WITH (MODULUS 5, REMAINDER 1);
|
CREATE TABLE fk_partitioned_fk_3_1 PARTITION OF fk_partitioned_fk_3 FOR VALUES WITH (MODULUS 5, REMAINDER 1);
|
||||||
ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_3
|
ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_3
|
||||||
FOR VALUES FROM (2000,2000) TO (3000,3000);
|
FOR VALUES FROM (2000,2000) TO (3000,3000);
|
||||||
|
-- Creating a foreign key with ONLY on a partitioned table referencing
|
||||||
|
-- a non-partitioned table fails.
|
||||||
|
ALTER TABLE ONLY fk_partitioned_fk ADD FOREIGN KEY (a, b)
|
||||||
|
REFERENCES fk_notpartitioned_pk;
|
||||||
|
ERROR: cannot use ONLY for foreign key on partitioned table "fk_partitioned_fk" referencing relation "fk_notpartitioned_pk"
|
||||||
|
-- Adding a NOT VALID foreign key on a partitioned table referencing
|
||||||
|
-- a non-partitioned table fails.
|
||||||
|
ALTER TABLE fk_partitioned_fk ADD FOREIGN KEY (a, b)
|
||||||
|
REFERENCES fk_notpartitioned_pk NOT VALID;
|
||||||
|
ERROR: cannot add NOT VALID foreign key on partitioned table "fk_partitioned_fk" referencing relation "fk_notpartitioned_pk"
|
||||||
|
DETAIL: This feature is not yet supported on partitioned tables.
|
||||||
-- these inserts, targetting both the partition directly as well as the
|
-- these inserts, targetting both the partition directly as well as the
|
||||||
-- partitioned table, should all fail
|
-- partitioned table, should all fail
|
||||||
INSERT INTO fk_partitioned_fk (a,b) VALUES (500, 501);
|
INSERT INTO fk_partitioned_fk (a,b) VALUES (500, 501);
|
||||||
|
@ -1106,6 +1106,15 @@ CREATE TABLE fk_partitioned_fk_3_1 PARTITION OF fk_partitioned_fk_3 FOR VALUES W
|
|||||||
ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_3
|
ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_3
|
||||||
FOR VALUES FROM (2000,2000) TO (3000,3000);
|
FOR VALUES FROM (2000,2000) TO (3000,3000);
|
||||||
|
|
||||||
|
-- Creating a foreign key with ONLY on a partitioned table referencing
|
||||||
|
-- a non-partitioned table fails.
|
||||||
|
ALTER TABLE ONLY fk_partitioned_fk ADD FOREIGN KEY (a, b)
|
||||||
|
REFERENCES fk_notpartitioned_pk;
|
||||||
|
-- Adding a NOT VALID foreign key on a partitioned table referencing
|
||||||
|
-- a non-partitioned table fails.
|
||||||
|
ALTER TABLE fk_partitioned_fk ADD FOREIGN KEY (a, b)
|
||||||
|
REFERENCES fk_notpartitioned_pk NOT VALID;
|
||||||
|
|
||||||
-- these inserts, targetting both the partition directly as well as the
|
-- these inserts, targetting both the partition directly as well as the
|
||||||
-- partitioned table, should all fail
|
-- partitioned table, should all fail
|
||||||
INSERT INTO fk_partitioned_fk (a,b) VALUES (500, 501);
|
INSERT INTO fk_partitioned_fk (a,b) VALUES (500, 501);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user