| From: | Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> |
|---|---|
| To: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Cc: | Andrew Dunstan <andrew(at)dunslane(dot)net>, jian he <jian(dot)universality(at)gmail(dot)com> |
| Subject: | Re: doc: Clarify ALTER CONSTRAINT enforceability wording |
| Date: | 2026-05-26 05:42:48 |
| Message-ID: | 72669A61-01A6-4B6C-A9A7-46BDF094B875@gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
> On May 25, 2026, at 17:31, Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> wrote:
>
> Hi,
>
> I just started to test “Add support for altering CHECK constraint enforceability”. I read the related ALTER TABLE doc first, and found it a bit confusing:
> ```
> ALTER CONSTRAINT
> This form alters the attributes of a constraint that was previously created. Currently FOREIGN KEY and CHECK constraints may be altered in this fashion, but see below.
> ```
>
> In the feature commit 342051d73, only “CHECK" was added:
> ```
> --- a/doc/src/sgml/ref/alter_table.sgml
> +++ b/doc/src/sgml/ref/alter_table.sgml
> @@ -578,8 +578,8 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
> <listitem>
> <para>
> This form alters the attributes of a constraint that was previously
> - created. Currently only foreign key constraints may be altered in
> - this fashion, but see below.
> + created. Currently <literal>FOREIGN KEY</literal> and <literal>CHECK</literal>
> + constraints may be altered in this fashion, but see below.
> </para>
> ```
>
> However, the last phrase “but see below” is quite confusing. I read the doc several times up and down, and finally my best guess is that “see below” refers to the immediately following paragraph’s sentence “Only not-null constraints may be altered in this fashion at present”, but the sentence does not say anything about enforceability.
> ```
> ALTER CONSTRAINT ... INHERIT
> ALTER CONSTRAINT ... NO INHERIT
> These forms modify an inheritable constraint so that it becomes not inheritable, or vice-versa. **Only not-null constraints may be altered in this fashion at present.** In addition to changing the inheritability status of the constraint, in the case where a non-inheritable constraint is being marked inheritable, if the table has children, an equivalent constraint will be added to them. If marking an inheritable constraint as non-inheritable on a table with children, then the corresponding constraint on children will be marked as no longer inherited, but not removed.
> ```
>
> As I understand it, the current behavior is:
> * Deferrability attributes can only be altered for FOREIGN KEY constraints
> * Enforceability attributes can be altered for both FOREIGN KEY and CHECK constraints, and CHECK support was newly added by 342051d73 for v19
>
> To remove the confusion, I updated the documentation. See the attached patch for details.
>
> Best regards,
> --
> Chao Li (Evan)
> HighGo Software Co., Ltd.
> https://www.highgo.com/
>
>
>
>
> <v1-0001-doc-Clarify-ALTER-CONSTRAINT-enforceability-behav.patch>
As I found a bug of the feature and proposed a fix in [1], let's merge this thread into that one, as they are for the same feature.
[1] https://postgr.es/m/E74C57FA-1DD0-4C8E-8FB1-538034752592@gmail.com
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Chao Li | 2026-05-26 05:48:02 | Re: Fix bug of CHECK constraint enforceability recursion |
| Previous Message | Kyotaro Horiguchi | 2026-05-26 05:39:12 | Re: NULL pointer dereference in syslogger with load_libraries() and -DEXEC_BACKEND at startup |