diff options
-rw-r--r-- | src/backend/catalog/index.c | 9 | ||||
-rw-r--r-- | src/test/regress/expected/alter_table.out | 2 |
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 | | | |