Re: NOT ENFORCED constraint feature

From: Amul Sul <sulamul(at)gmail(dot)com>
To: Peter Eisentraut <peter(at)eisentraut(dot)org>
Cc: jian he <jian(dot)universality(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Joel Jacobson <joel(at)compiler(dot)org>
Subject: Re: NOT ENFORCED constraint feature
Date: 2025-01-29 12:47:09
Message-ID: CAAJ_b94bHkMafJTkJKPJbrF-zXqxTBynRuXZWGNaHURop9_CNQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Jan 28, 2025 at 9:47 PM Peter Eisentraut <peter(at)eisentraut(dot)org> wrote:
>
> > In 0006, this change in the test output should be improved:
> >
> > -- XXX: error message is misleading here
> > ALTER TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
> > -ERROR: ALTER CONSTRAINT statement constraints cannot be marked ENFORCED
> > -LINE 1: ...TABLE unique_tbl ALTER CONSTRAINT unique_tbl_i_key ENFORCED;
> > - ^
> > +ERROR: constraint "unique_tbl_i_key" of relation "unique_tbl" is not a
> > foreign key constraint
> >
> > Maybe this should be along the lines of "ALTER CONSTRAINT ... ENFORCED
> > is not supported for %s constraints" or something like that.
> >
>
> Ok, let me see what can be done here.

I tried to improve the error message by adding the following details
for this case in the attached version:

+ERROR: cannot alter enforceability of constraint "unique_tbl_i_key"
of relation "unique_tbl"
+DETAIL: Enforceability can only be altered for foreign key constraints.

> On 28.01.25 11:58, Amul Sul wrote:
> >> This behavior is not correct:
> >>
> >> +-- Changing it back to ENFORCED will leave the constraint in the NOT
> >> VALID state
> >> +ALTER TABLE FKTABLE ALTER CONSTRAINT fktable_ftest1_fkey ENFORCED;
> >> +-- Which needs to be explicitly validated.
> >> +ALTER TABLE FKTABLE VALIDATE CONSTRAINT fktable_ftest1_fkey;
> >>
> >> Setting the constraint to enforced should enforce it immediately. This
> >> SQL statement is covered by the SQL standard. Also, I think it's a
> >> better user experience if you don't require two steps.
> >>
> > Let me clarify: the constraint will be enforced for new inserts and
> > updates, but it won't be validated against existing data, so those
> > will remain marked as invalid.
>
> Yes, I understand, but that is the not the correct behavior of this
> command per SQL standard.

I haven't worked on this yet due to a lack of clarity, and it requires
further discussion. The behavior will remain the same as the previous
version. The attached set is the rebased version on top of the latest
master head and includes the aforementioned error message
improvements.

Regards,
Amul

Attachment Content-Type Size
v11-0002-refactor-Split-tryAttachPartitionForeignKey.patch application/x-patch 13.5 KB
v11-0003-refactor-Pass-Relid-instead-of-Relation-to-creat.patch application/x-patch 3.3 KB
v11-0004-refactor-Change-ATExecAlterConstrRecurse-argumen.patch application/x-patch 5.0 KB
v11-0005-Remove-hastriggers-flag-check-before-fetching-FK.patch application/x-patch 10.8 KB
v11-0006-Add-support-for-NOT-ENFORCED-in-foreign-key-cons.patch application/x-patch 57.8 KB
v11-0007-Merge-the-parent-and-child-constraints-with-diff.patch application/x-patch 17.6 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Sandeep Thakkar 2025-01-29 12:59:21 Re: EDB Installer initcluster script changes - review requested
Previous Message Rahila Syed 2025-01-29 12:45:38 Re: Enhancing Memory Context Statistics Reporting