Re: alter check constraint enforceability

From: jian he <jian(dot)universality(at)gmail(dot)com>
To: Robert Treat <rob(at)xzilla(dot)net>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: alter check constraint enforceability
Date: 2025-08-11 09:53:08
Message-ID: CACJufxFY=GkptsiH8X=VdyYAnNE_=u5j6WyDufTste6CuzRvnw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Aug 7, 2025 at 7:35 AM Robert Treat <rob(at)xzilla(dot)net> wrote:
>
> + if (rel->rd_rel->relkind == RELKIND_RELATION &&
> + cmdcon->is_enforced &&
> + !currcon->conenforced)
>
> i think I have convinced myself that this is correct, but maybe I will
> ask you if you had any concerns that this needed to also consider
> RELKIND_PARTITIONED_TABLE as well?
>

ATExecAlterCheckConstrEnforceability itself will be recursive to all
the children.
AlterConstrUpdateConstraintEntry is responsible for changing the catalog state.
except the changing the catalog state, if we change the check
constraint from NOT ENFORCED
to ENFORCED, we also need to verify it in phase 3.
that's the purpose of
> + if (rel->rd_rel->relkind == RELKIND_RELATION &&
> + cmdcon->is_enforced &&
> + !currcon->conenforced)

partitioned tables don't have storage, phase3 table scan to verify
check constraint on partitioned table
don't have effect.

also partitioned table check constraint (name, definition
(pg_constraint.conbin) must match with partition
otherwise partition can be attached to the partitioned table.
so here you don't need to consider RELKIND_PARTITIONED_TABLE.

Attachment Content-Type Size
v3-0001-alter-check-constraint-enforceability.patch text/x-patch 22.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2025-08-11 10:22:13 Re: [PATCH] Proposal to Enable/Disable Index using ALTER INDEX
Previous Message Japin Li 2025-08-11 09:39:01 Re: [WIP]Vertical Clustered Index (columnar store extension) - take2