v2-0001-error-handling-for-ALTER-CONSTRAINT-NOT-VALID.no-cfbot

application/octet-stream

Filename: v2-0001-error-handling-for-ALTER-CONSTRAINT-NOT-VALID.no-cfbot
Type: application/octet-stream
Part: 0
Message: Re: ALTER TABLE ALTER CONSTRAINT misleading error message
From 2d60af3bcfe4359d79801ddb2d3cfd3f3fee0d4e Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Fri, 13 Jun 2025 15:06:03 +0800
Subject: [PATCH v2 1/1] error handling for ALTER CONSTRAINT NOT VALID

ALTER TABLE ... ALTER CONSTRAINT ... NOT VALID is not supported,\
so set appropriate error handling to in gram.y.

discussion: https://postgr.es/m/CACJufxHSp2puxP=q8ZtUGL1F+heapnzqFBZy5ZNGUjUgwjBqTQ@mail.gmail.com
---
 src/backend/parser/gram.y                 | 9 ++++++++-
 src/test/regress/expected/foreign_key.out | 2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 46bbdcbc740..4c405c7f8dc 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -2686,7 +2686,14 @@ alter_table_cmd:
 						c->alterDeferrability = true;
 					if ($4 & CAS_NO_INHERIT)
 						c->alterInheritability = true;
-					processCASbits($4, @4, "FOREIGN KEY",
+
+					if ($4 & CAS_NOT_VALID)
+						ereport(ERROR,
+								errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+								errmsg("ALTER TABLE ... ALTER CONSTRAINT ... NOT VALID is not supported"),
+								parser_errposition(@4));
+
+					processCASbits($4, @4, NULL,
 									&c->deferrable,
 									&c->initdeferred,
 									&c->is_enforced,
diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out
index 6a8f3959345..cd5f91b08d0 100644
--- a/src/test/regress/expected/foreign_key.out
+++ b/src/test/regress/expected/foreign_key.out
@@ -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;
 ERROR:  constraint "fktable_fk_fkey" of relation "fktable" is not a not-null constraint
 ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
-ERROR:  FOREIGN KEY constraints cannot be marked NOT VALID
+ERROR:  ALTER TABLE ... ALTER CONSTRAINT ... NOT VALID is not supported
 LINE 1: ...ER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey NOT VALID;
                                                              ^
 ALTER TABLE fktable ALTER CONSTRAINT fktable_fk_fkey ENFORCED NOT ENFORCED;
-- 
2.34.1