summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/catalog/index.c9
-rw-r--r--src/test/regress/expected/alter_table.out2
2 files changed, 5 insertions, 6 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index d25b39bb54..25c5bead9f 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -185,6 +185,9 @@ relationHasPrimaryKey(Relation rel)
* created NOT NULL during CREATE TABLE), do an ALTER SET NOT NULL to mark
* them so --- or fail if they are not in fact nonnull.
*
+ * As of PG v10, the SET NOT NULL is applied to child tables as well, so
+ * that the behavior is like a manual SET NOT NULL.
+ *
* Caller had better have at least ShareLock on the table, else the not-null
* checking isn't trustworthy.
*/
@@ -253,17 +256,13 @@ index_check_primary_key(Relation heapRel,
}
/*
- * XXX: Shouldn't the ALTER TABLE .. SET NOT NULL cascade to child tables?
- * Currently, since the PRIMARY KEY itself doesn't cascade, we don't
- * cascade the notnull constraint(s) either; but this is pretty debatable.
- *
* XXX: possible future improvement: when being called from ALTER TABLE,
* it would be more efficient to merge this with the outer ALTER TABLE, so
* as to avoid two scans. But that seems to complicate DefineIndex's API
* unduly.
*/
if (cmds)
- AlterTableInternal(RelationGetRelid(heapRel), cmds, false);
+ AlterTableInternal(RelationGetRelid(heapRel), cmds, true);
}
/*
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 13d6a4b747..e9fd1aacce 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -328,7 +328,7 @@ Number of child tables: 1 (Use \d+ to list them.)
Table "public.constraint_rename_test2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
- a | integer | | |
+ a | integer | | not null |
b | integer | | |
c | integer | | |
d | integer | | |