From: | Amul Sul <sulamul(at)gmail(dot)com> |
---|---|
To: | jian he <jian(dot)universality(at)gmail(dot)com> |
Cc: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Joel Jacobson <joel(at)compiler(dot)org> |
Subject: | Re: NOT ENFORCED constraint feature |
Date: | 2024-12-10 11:47:25 |
Message-ID: | CAAJ_b96VxkJNb-5j+tHd0w3RqBzOER5hsB6frYPHs1-szxG0UA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Dec 10, 2024 at 1:21 PM jian he <jian(dot)universality(at)gmail(dot)com> wrote:
>
> hi. some minor issue about v7-0001.
>
> there are 5 appearances of "sizeof(CookedConstraint)"
> to make it safe, it would be nice to manual do
> `
> cooked->is_enforced = true;
> `
> for other kinds of constraints.
>
I am not sure if it's necessary, but it doesn't seem like a bad idea,
did the same in the attached version.
>
> static bool
> MergeWithExistingConstraint(Relation rel, const char *ccname, Node *expr,
> bool allow_merge, bool is_local,
> + bool is_enforced,
> bool is_initially_valid,
> bool is_no_inherit)
> {
> @@ -2729,12 +2738,24 @@ MergeWithExistingConstraint(Relation rel,
> const char *ccname, Node *expr,
> * If the child constraint is "not valid" then cannot merge with a
> * valid parent constraint.
> */
> - if (is_initially_valid && !con->convalidated)
> + if (is_initially_valid && con->conenforced && !con->convalidated)
> ereport(ERROR,
> (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
> errmsg("constraint \"%s\" conflicts with NOT VALID constraint on
> relation \"%s\"",
> ccname, RelationGetRelationName(rel))));
>
> There are no tests for this change. I think this change is not necessary.
>
It is necessary; otherwise, it would raise an error for a NOT ENFORCED
constraint, which is NOT VALID by default.
>
> - a/src/test/regress/expected/alter_table.out
> +++ b/src/test/regress/expected/alter_table.out
> ...
> +ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten_not_enforced; -- fail
> +ERROR: cannot validated NOT ENFORCED constraint
>
> there should be
> ERROR: cannot validate NOT ENFORCED constraint
> ?
>
Are you sure you're looking at the latest patch? The error string is
already the same as you suggested.
> Do we need to update create_foreign_table.sgml
> and alter_foreign_table.sgml?
Yes, I think we just need to add the syntax; a description isn't
necessary, imo, since constraints on foreign constraints are never
enforced.
Regards,
Amul
Attachment | Content-Type | Size |
---|---|---|
v8-0001-Add-support-for-NOT-ENFORCED-in-CHECK-constraints.patch | application/octet-stream | 76.4 KB |
v8-0002-refactor-split-ATExecAlterConstrRecurse.patch | application/octet-stream | 8.3 KB |
v8-0003-refactor-Change-ATExecAlterConstrRecurse-argument.patch | application/octet-stream | 6.2 KB |
v8-0004-Remove-hastriggers-flag-check-before-fetching-FK-.patch | application/octet-stream | 10.8 KB |
v8-0005-WIP-Add-support-for-NOT-ENFORCED-in-foreign-key-c.patch | application/octet-stream | 58.3 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Shubham Khanna | 2024-12-10 11:49:33 | Re: Adding a '--two-phase' option to 'pg_createsubscriber' utility. |
Previous Message | Shubham Khanna | 2024-12-10 11:47:06 | Re: Adding a '--two-phase' option to 'pg_createsubscriber' utility. |