Re: NOT ENFORCED constraint feature

amul sul <sulamul@gmail.com>

From: Amul Sul <sulamul@gmail.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: jian he <jian.universality@gmail.com>, Alvaro Herrera <alvherre@alvh.no-ip.org>, pgsql-hackers <pgsql-hackers@postgresql.org>, Joel Jacobson <joel@compiler.org>
Date: 2025-01-20T16:53:14Z
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 →
  1. Add support for NOT ENFORCED in foreign key constraints

  2. Expand test a bit

  3. refactor: Pass relation OID instead of Relation to createForeignKeyCheckTriggers()

  4. refactor: Split ATExecAlterConstraintInternal()

  5. refactor: Move some code that updates pg_constraint to a separate function

  6. Move RemoveInheritedConstraint() call slightly earlier

  7. refactor: Split tryAttachPartitionForeignKey()

  8. refactor: re-add ATExecAlterChildConstr()

  9. Add ATAlterConstraint struct for ALTER .. CONSTRAINT

  10. refactor: split ATExecAlterConstrRecurse()

  11. Add support for NOT ENFORCED in CHECK constraints

Attachments

On Fri, Jan 17, 2025 at 6:20 PM Amul Sul <sulamul@gmail.com> wrote:
>
> On Thu, Jan 16, 2025 at 6:55 PM Amul Sul <sulamul@gmail.com> wrote:
> >
> > On Thu, Jan 16, 2025 at 6:07 PM Peter Eisentraut <peter@eisentraut.org> wrote:
> > >
> > > On 11.01.25 18:26, Amul Sul wrote:
> > > > On Saturday, 11 January 2025, Peter Eisentraut <peter@eisentraut.org
> > > > <mailto:peter@eisentraut.org>> wrote:
> > > >
> > > >     I have applied v8-0001, with some editing of the documentation and
> > > >     in the tests.  I'll continue reviewing the subsequent patches.
> > > >
> > > >
> > > > Thank you for the improvement and commit.
> > >
> > > I have also committed v8-0002, the refactor of ATExecAlterConstrRecurse().
> > >
> > > All the remaining patches go together, so w are now waiting on an
> > > updated patch set from you.
> > >
> >
> > Thanks!
> >
> > Yes, I'm working on it and will post it tomorrow.
> >
>
> Attached is a new set of patches. Please ignore patch 0001 here, which
> was posted separately [1] -- proposes allowing invalid foreign key
> constraints on partitioned tables. Patch 0002 refactors
> tryAttachPartitionForeignKey(), primarily needed by the new patch
> v9-0006 included in this set. This patch handles merging constraints
> with different enforceability. Without it, a new constraint would be
> created on the child. However, this patch introduces additional code
> that may appear somewhat messy or confusing. I've added plenty of
> comments to clarify the logic. While I’ve done some testing, it hasn’t
> been extensive. I plan to do more testing in the next week.
>
> Please let me know if we should continue with patch 0006 improvement,
> or if the feature up to patch 0005, which enforces matching
> enforceability before merging constraints, is sufficient.
>
> 1]  https://postgr.es/m/CAAJ_b96Bp=-ZwihPPtuaNX=SrZ0U6ZsXD3+fgARO0JuKa8v2jQ@mail.gmail.com
>

I made minor updates to the attached version, particularly ensuring
that the order of relation opening and closing remains the same as
before in ATExecAlterConstrRecurse(). Additionally, I’ve added a
refactoring patch to make createForeignKeyActionTriggers() accept a
relation OID instead of a Relation, making this function consistent
with others like createForeignKeyCheckTriggers().

Regards,
Amul