Skip to content

Commit 7bbc462

Browse files
committed
Fix ALTER TABLE error message
This bogus error message was introduced in 2013 by commit f177cbf, because of misunderstanding the processCASbits() API; at the time, no test cases were added that would be affected by this change. Only in ca87c41 was one added (along with a couple of typos), with an XXX note that the error message was bogus. Fix the whole, add some test cases. Backpatch all the way back. Reviewed-by: Nathan Bossart <nathandbossart@gmail.com> Discussion: https://postgr.es/m/202503041822.aobpqke3igvb@alvherre.pgsql
1 parent bacbc48 commit 7bbc462

File tree

5 files changed

+17
-9
lines changed

5 files changed

+17
-9
lines changed

src/backend/parser/gram.y

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2663,7 +2663,7 @@ alter_table_cmd:
26632663
n->def = (Node *) c;
26642664
c->conname = $3;
26652665
c->alterDeferrability = true;
2666-
processCASbits($4, @4, "ALTER CONSTRAINT statement",
2666+
processCASbits($4, @4, "FOREIGN KEY",
26672667
&c->deferrable,
26682668
&c->initdeferred,
26692669
NULL, NULL, NULL, yyscanner);

src/test/regress/expected/constraints.out

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ SELECT * FROM unique_tbl;
735735
3 | threex
736736
(5 rows)
737737

738-
-- enforcibility cannot be specified or set for unique constrain
738+
-- enforceability cannot be specified or set for unique constraint
739739
CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
740740
ERROR: misplaced ENFORCED clause
741741
LINE 1: CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
@@ -744,13 +744,12 @@ CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
744744
ERROR: misplaced NOT ENFORCED clause
745745
LINE 1: CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
746746
^
747-
-- XXX: error message is misleading here
748747
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
749-
ERROR: ALTER CONSTRAINT statement constraints cannot be marked ENFORCED
748+
ERROR: FOREIGN KEY constraints cannot be marked ENFORCED
750749
LINE 1: ...TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
751750
^
752751
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORCED;
753-
ERROR: ALTER CONSTRAINT statement constraints cannot be marked NOT ENFORCED
752+
ERROR: FOREIGN KEY constraints cannot be marked NOT ENFORCED
754753
LINE 1: ...ABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORC...
755754
^
756755
DROP TABLE unique_tbl;

src/test/regress/expected/foreign_key.out

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1278,11 +1278,19 @@ DETAIL: Key (fk)=(20) is not present in table "pktable".
12781278
COMMIT;
12791279
-- try additional syntax
12801280
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE;
1281-
-- illegal option
1281+
-- illegal options
12821282
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY DEFERRED;
12831283
ERROR: constraint declared INITIALLY DEFERRED must be DEFERRABLE
12841284
LINE 1: ...e ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY ...
12851285
^
1286+
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT;
1287+
ERROR: FOREIGN KEY constraints cannot be marked NO INHERIT
1288+
LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT...
1289+
^
1290+
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
1291+
ERROR: FOREIGN KEY constraints cannot be marked NOT VALID
1292+
LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
1293+
^
12861294
-- test order of firing of FK triggers when several RI-induced changes need to
12871295
-- be made to the same row. This was broken by subtransaction-related
12881296
-- changes in 8.0.

src/test/regress/sql/constraints.sql

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,10 +531,9 @@ COMMIT;
531531

532532
SELECT * FROM unique_tbl;
533533

534-
-- enforcibility cannot be specified or set for unique constrain
534+
-- enforceability cannot be specified or set for unique constraint
535535
CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
536536
CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
537-
-- XXX: error message is misleading here
538537
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
539538
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORCED;
540539

src/test/regress/sql/foreign_key.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -970,8 +970,10 @@ COMMIT;
970970

971971
-- try additional syntax
972972
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE;
973-
-- illegal option
973+
-- illegal options
974974
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY DEFERRED;
975+
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT;
976+
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
975977

976978
-- test order of firing of FK triggers when several RI-induced changes need to
977979
-- be made to the same row. This was broken by subtransaction-related

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy