]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix ALTER TABLE error message
authorÁlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 4 Mar 2025 19:07:30 +0000 (20:07 +0100)
committerÁlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 4 Mar 2025 19:07:30 +0000 (20:07 +0100)
This bogus error message was introduced in 2013 by commit f177cbfe676d,
because of misunderstanding the processCASbits() API; at the time, no
test cases were added that would be affected by this change.  Only in
ca87c415e2fc 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

src/backend/parser/gram.y
src/test/regress/expected/foreign_key.out
src/test/regress/sql/foreign_key.sql

index 20ad8e438bdbfa6492505fcf89c54d94f7aff256..2bdad88520dc855e947f5138d608af1ca3d4a0a4 100644 (file)
@@ -2420,7 +2420,7 @@ alter_table_cmd:
                                        n->def = (Node *) c;
                                        c->contype = CONSTR_FOREIGN; /* others not supported, yet */
                                        c->conname = $3;
-                                       processCASbits($4, @4, "ALTER CONSTRAINT statement",
+                                       processCASbits($4, @4, "FOREIGN KEY",
                                                                        &c->deferrable,
                                                                        &c->initdeferred,
                                                                        NULL, NULL, yyscanner);
index 1f492bf56e3f90a38a41686f2703c7bf65578e76..9f7a5ad06b9145a3a3b90562fc95f6926858e4ea 100644 (file)
@@ -1240,11 +1240,15 @@ DETAIL:  Key (fk)=(20) is not present in table "pktable".
 COMMIT;
 -- try additional syntax
 ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE;
--- illegal option
+-- illegal options
 ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY DEFERRED;
 ERROR:  constraint declared INITIALLY DEFERRED must be DEFERRABLE
 LINE 1: ...e ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY ...
                                                              ^
+ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT;
+ERROR:  FOREIGN KEY constraints cannot be marked NO INHERIT
+ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
+ERROR:  FOREIGN KEY constraints cannot be marked NOT VALID
 -- test order of firing of FK triggers when several RI-induced changes need to
 -- be made to the same row.  This was broken by subtransaction-related
 -- changes in 8.0.
index 7af7d562c7b385660719e2617cf00db9e9eb7383..9529f02ed3490235d47f56583e67e0e165af8931 100644 (file)
@@ -943,8 +943,10 @@ COMMIT;
 
 -- try additional syntax
 ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE;
--- illegal option
+-- illegal options
 ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY DEFERRED;
+ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT;
+ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
 
 -- test order of firing of FK triggers when several RI-induced changes need to
 -- be made to the same row.  This was broken by subtransaction-related