Re: NOT ENFORCED constraint feature
amul sul <sulamul@gmail.com>
From: Amul Sul <sulamul@gmail.com>
To: jian he <jian.universality@gmail.com>
Cc: Peter Eisentraut <peter@eisentraut.org>,
pgsql-hackers <pgsql-hackers@postgresql.org>, Joel Jacobson <joel@compiler.org>
Date: 2024-12-06T09:13:51Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add support for NOT ENFORCED in foreign key constraints
- eec0040c4bcd 18.0 landed
-
Expand test a bit
- 5d5f415816a6 18.0 landed
-
refactor: Pass relation OID instead of Relation to createForeignKeyCheckTriggers()
- ef7a5af77d44 18.0 landed
-
refactor: Split ATExecAlterConstraintInternal()
- 639238b978fe 18.0 landed
-
refactor: Move some code that updates pg_constraint to a separate function
- a3280e2a494f 18.0 landed
-
Move RemoveInheritedConstraint() call slightly earlier
- dabccf45139a 18.0 landed
-
refactor: Split tryAttachPartitionForeignKey()
- 1d26c2d2c4b8 18.0 landed
-
refactor: re-add ATExecAlterChildConstr()
- 64224a834ce4 18.0 landed
-
Add ATAlterConstraint struct for ALTER .. CONSTRAINT
- 80d7f990496b 18.0 landed
-
refactor: split ATExecAlterConstrRecurse()
- 7a947ed25b54 18.0 landed
-
Add support for NOT ENFORCED in CHECK constraints
- ca87c415e2fc 18.0 landed
On Thu, Dec 5, 2024 at 11:02 AM jian he <jian.universality@gmail.com> wrote: > > hi. > accidentally hit segfault. > create table c11 (a int not enforced); > create table c11 (a int enforced); > we can solve it via the following or changing SUPPORTS_ATTRS accordingly. > > diff --git a/src/backend/parser/parse_utilcmd.c > b/src/backend/parser/parse_utilcmd.c > index 5ab44149e5..fe1116c092 100644 > --- a/src/backend/parser/parse_utilcmd.c > +++ b/src/backend/parser/parse_utilcmd.c > @@ -3965,7 +3965,7 @@ transformConstraintAttrs(CreateStmtContext *cxt, > List *constraintList) > break; > case CONSTR_ATTR_ENFORCED: > - if (lastprimarycon && > + if (lastprimarycon == NULL || > lastprimarycon->contype != CONSTR_CHECK) > ereport(ERROR, > > (errcode(ERRCODE_SYNTAX_ERROR), > @@ -3981,7 +3981,7 @@ transformConstraintAttrs(CreateStmtContext *cxt, > List *constraintList) > break; > case CONSTR_ATTR_NOT_ENFORCED: > - if (lastprimarycon && > + if (lastprimarycon == NULL || > lastprimarycon->contype != CONSTR_CHECK) > ereport(ERROR, > > (errcode(ERRCODE_SYNTAX_ERROR), > Yes, that was a logical oversight on my part. Your suggestion looks good to me, thanks. > > ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT the_constraint > CHECK (value > 0) NOT ENFORCED; > ERROR: CHECK constraints cannot be marked NOT ENFORCED > > the error message is not good? maybe better option would be: > ERROR: DOMAIN CHECK constraints cannot be marked NOT ENFORCED > > we can do it like: > index 833b3be02b..4a7ab0c2a3 100644 > --- a/src/backend/parser/gram.y > +++ b/src/backend/parser/gram.y > @@ -4342,7 +4342,7 @@ DomainConstraintElem: > n->location = @1; > n->raw_expr = $3; > n->cooked_expr = NULL; > - processCASbits($5, @5, "CHECK", > + processCASbits($5, @5, "DOMAIN CHECK", > > NULL, NULL, NULL, &n->skip_validation, > > &n->is_no_inherit, yyscanner); I believe this should either be a separate patch or potentially included in your "Refactor AlterDomainAddConstraint" proposal[1]. Regards, Amul 1] https://postgr.es/m/CACJufxHitd5LGLBSSAPShhtDWxT0ViVKTHinkYW-skBX93TcpA@mail.gmail.com