mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 23:56:58 +03:00
Fix ALTER TABLE error message
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
This commit is contained in:
parent
bacbc4863b
commit
7bbc46213d
@ -2663,7 +2663,7 @@ alter_table_cmd:
|
|||||||
n->def = (Node *) c;
|
n->def = (Node *) c;
|
||||||
c->conname = $3;
|
c->conname = $3;
|
||||||
c->alterDeferrability = true;
|
c->alterDeferrability = true;
|
||||||
processCASbits($4, @4, "ALTER CONSTRAINT statement",
|
processCASbits($4, @4, "FOREIGN KEY",
|
||||||
&c->deferrable,
|
&c->deferrable,
|
||||||
&c->initdeferred,
|
&c->initdeferred,
|
||||||
NULL, NULL, NULL, yyscanner);
|
NULL, NULL, NULL, yyscanner);
|
||||||
|
@ -735,7 +735,7 @@ SELECT * FROM unique_tbl;
|
|||||||
3 | threex
|
3 | threex
|
||||||
(5 rows)
|
(5 rows)
|
||||||
|
|
||||||
-- enforcibility cannot be specified or set for unique constrain
|
-- enforceability cannot be specified or set for unique constraint
|
||||||
CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
|
CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
|
||||||
ERROR: misplaced ENFORCED clause
|
ERROR: misplaced ENFORCED clause
|
||||||
LINE 1: CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
|
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);
|
|||||||
ERROR: misplaced NOT ENFORCED clause
|
ERROR: misplaced NOT ENFORCED clause
|
||||||
LINE 1: CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
|
LINE 1: CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
|
||||||
^
|
^
|
||||||
-- XXX: error message is misleading here
|
|
||||||
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
||||||
ERROR: ALTER CONSTRAINT statement constraints cannot be marked ENFORCED
|
ERROR: FOREIGN KEY constraints cannot be marked ENFORCED
|
||||||
LINE 1: ...TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
LINE 1: ...TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
||||||
^
|
^
|
||||||
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORCED;
|
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORCED;
|
||||||
ERROR: ALTER CONSTRAINT statement constraints cannot be marked NOT ENFORCED
|
ERROR: FOREIGN KEY constraints cannot be marked NOT ENFORCED
|
||||||
LINE 1: ...ABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORC...
|
LINE 1: ...ABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORC...
|
||||||
^
|
^
|
||||||
DROP TABLE unique_tbl;
|
DROP TABLE unique_tbl;
|
||||||
|
@ -1278,11 +1278,19 @@ DETAIL: Key (fk)=(20) is not present in table "pktable".
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
-- try additional syntax
|
-- try additional syntax
|
||||||
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE;
|
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 NOT DEFERRABLE INITIALLY DEFERRED;
|
||||||
ERROR: constraint declared INITIALLY DEFERRED must be DEFERRABLE
|
ERROR: constraint declared INITIALLY DEFERRED must be DEFERRABLE
|
||||||
LINE 1: ...e ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY ...
|
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
|
||||||
|
LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT...
|
||||||
|
^
|
||||||
|
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
|
||||||
|
ERROR: FOREIGN KEY constraints cannot be marked NOT VALID
|
||||||
|
LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
|
||||||
|
^
|
||||||
-- test order of firing of FK triggers when several RI-induced changes need to
|
-- 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
|
-- be made to the same row. This was broken by subtransaction-related
|
||||||
-- changes in 8.0.
|
-- changes in 8.0.
|
||||||
|
@ -531,10 +531,9 @@ COMMIT;
|
|||||||
|
|
||||||
SELECT * FROM unique_tbl;
|
SELECT * FROM unique_tbl;
|
||||||
|
|
||||||
-- enforcibility cannot be specified or set for unique constrain
|
-- enforceability cannot be specified or set for unique constraint
|
||||||
CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
|
CREATE TABLE UNIQUE_EN_TBL(i int UNIQUE ENFORCED);
|
||||||
CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
|
CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
|
||||||
-- XXX: error message is misleading here
|
|
||||||
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
||||||
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORCED;
|
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT ENFORCED;
|
||||||
|
|
||||||
|
@ -970,8 +970,10 @@ COMMIT;
|
|||||||
|
|
||||||
-- try additional syntax
|
-- try additional syntax
|
||||||
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE;
|
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 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
|
-- 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
|
-- be made to the same row. This was broken by subtransaction-related
|
||||||
|
Loading…
x
Reference in New Issue
Block a user