Commit 5225c663 authored by Robert Haas's avatar Robert Haas

Clarify policy on marking inherited constraints as valid.

Amit Langote and Robert Haas
parent 5c6df67e
......@@ -1028,11 +1028,15 @@ ALTER TABLE ALL IN TABLESPACE <replaceable class="PARAMETER">name</replaceable>
<para>
If a table has any descendant tables, it is not permitted to add,
rename, or change the type of a column, or rename an inherited constraint
in the parent table without doing
the same to the descendants. That is, <command>ALTER TABLE ONLY</command>
will be rejected. This ensures that the descendants always have
columns matching the parent.
rename, or change the type of a column in the parent table without doing
same to the descendants. This ensures that the descendants always have
columns matching the parent. Similarly, a constraint cannot be renamed
in the parent without also renaming it in all descendents, so that
constraints also match between the parent and its descendents.
Also, because selecting from the parent also selects from its descendents,
a constraint on the parent cannot be marked valid unless it is also marked
valid for those descendents. In all of these cases, <command>ALTER TABLE
ONLY</command> will be rejected.
</para>
<para>
......
......@@ -6908,7 +6908,8 @@ ATExecValidateConstraint(Relation rel, char *constrName, bool recurse,
/*
* If we are told not to recurse, there had better not be any
* child tables; else the addition would put them out of step.
* child tables, because we can't mark the constraint on the
* parent valid unless it is valid for all child tables.
*/
if (!recurse)
ereport(ERROR,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment