doc: Clarify ALTER CONSTRAINT enforceability wording

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: doc: Clarify ALTER CONSTRAINT enforceability wording
Date: 2026-05-25 09:31:07
Message-ID: 711B1ED3-1781-4B6C-A573-B58AF20770E5@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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/

Attachment Content-Type Size
v1-0001-doc-Clarify-ALTER-CONSTRAINT-enforceability-behav.patch application/octet-stream 2.1 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message shveta malik 2026-05-25 09:58:26 Re: [PATCH] Release replication slot on error in SQL-callable slot functions
Previous Message Alexander Korotkov 2026-05-25 09:00:20 Re: Implement waiting for wal lsn replay: reloaded