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: v1-0001-doc-Clarify-ALTER-CONSTRAINT-enforceability-behav.patch
Description: Binary data

Reply via email to