git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5c6df67)
Clarify policy on marking inherited constraints as valid.
2016年9月15日 21:24:54 +0000 (17:24 -0400)
2016年9月15日 21:24:54 +0000 (17:24 -0400)
Amit Langote and Robert Haas


diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml
index 6f51cbc8962cc674bbaccbf51315cfcc0ed14701..e48ccf21e4fbd35d1ae4ac75af0dcf25741bab3c 100644 (file)
--- a/doc/src/sgml/ref/alter_table.sgml
+++ b/doc/src/sgml/ref/alter_table.sgml
@@ -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>
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 86e98148c1667e1b5cf04146e4945f1f5b5c8b42..d31276284ce9e3f302c9531f396842acfe7153c0 100644 (file)
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -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,
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /