mirror of
https://github.com/postgres/postgres.git
synced 2025-08-06 18:42:54 +03:00
Fix error message for ALTER CONSTRAINT ... NOT VALID
Trying to alter a constraint so that it becomes NOT VALID results in an error that assumes the constraint is a foreign key. This is potentially wrong, so give a more generic error message. While at it, give CREATE CONSTRAINT TRIGGER a better error message as well. Co-authored-by: jian he <jian.universality@gmail.com> Co-authored-by: Fujii Masao <masao.fujii@oss.nttdata.com> Co-authored-by: Álvaro Herrera <alvherre@kurilemu.de> Co-authored-by: Amul Sul <sulamul@gmail.com> Discussion: https://postgr.es/m/CACJufxHSp2puxP=q8ZtUGL1F+heapnzqFBZy5ZNGUjUgwjBqTQ@mail.gmail.com
This commit is contained in:
@@ -2668,6 +2668,12 @@ alter_table_cmd:
|
|||||||
c->alterDeferrability = true;
|
c->alterDeferrability = true;
|
||||||
if ($4 & CAS_NO_INHERIT)
|
if ($4 & CAS_NO_INHERIT)
|
||||||
c->alterInheritability = true;
|
c->alterInheritability = true;
|
||||||
|
/* handle unsupported case with specific error message */
|
||||||
|
if ($4 & CAS_NOT_VALID)
|
||||||
|
ereport(ERROR,
|
||||||
|
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("constraints cannot be altered to be NOT VALID"),
|
||||||
|
parser_errposition(@4));
|
||||||
processCASbits($4, @4, "FOREIGN KEY",
|
processCASbits($4, @4, "FOREIGN KEY",
|
||||||
&c->deferrable,
|
&c->deferrable,
|
||||||
&c->initdeferred,
|
&c->initdeferred,
|
||||||
|
@@ -748,6 +748,11 @@ ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
|
|||||||
ERROR: cannot alter enforceability of constraint "unique_tbl_i_key" of relation "unique_tbl"
|
ERROR: cannot alter enforceability of constraint "unique_tbl_i_key" of relation "unique_tbl"
|
||||||
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: cannot alter enforceability of constraint "unique_tbl_i_key" of relation "unique_tbl"
|
ERROR: cannot alter enforceability of constraint "unique_tbl_i_key" of relation "unique_tbl"
|
||||||
|
-- can't make an existing constraint NOT VALID
|
||||||
|
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT VALID;
|
||||||
|
ERROR: constraints cannot be altered to be NOT VALID
|
||||||
|
LINE 1: ...ABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT VALID;
|
||||||
|
^
|
||||||
DROP TABLE unique_tbl;
|
DROP TABLE unique_tbl;
|
||||||
--
|
--
|
||||||
-- EXCLUDE constraints
|
-- EXCLUDE constraints
|
||||||
|
@@ -1359,7 +1359,7 @@ LINE 1: ...e ALTER CONSTRAINT fktable_fk_fkey NOT DEFERRABLE INITIALLY ...
|
|||||||
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT;
|
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NO INHERIT;
|
||||||
ERROR: constraint "fktable_fk_fkey" of relation "fktable" is not a not-null constraint
|
ERROR: constraint "fktable_fk_fkey" of relation "fktable" is not a not-null constraint
|
||||||
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
|
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
|
||||||
ERROR: FOREIGN KEY constraints cannot be marked NOT VALID
|
ERROR: constraints cannot be altered to be NOT VALID
|
||||||
LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
|
LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
|
||||||
^
|
^
|
||||||
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey ENFORCED NOT ENFORCED;
|
ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey ENFORCED NOT ENFORCED;
|
||||||
|
@@ -537,6 +537,9 @@ CREATE TABLE UNIQUE_NOTEN_TBL(i int UNIQUE NOT ENFORCED);
|
|||||||
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;
|
||||||
|
|
||||||
|
-- can't make an existing constraint NOT VALID
|
||||||
|
ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key NOT VALID;
|
||||||
|
|
||||||
DROP TABLE unique_tbl;
|
DROP TABLE unique_tbl;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
Reference in New Issue
Block a user