aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 1293545947e..62d9917ca36 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -3015,17 +3015,34 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
coldef->is_not_null |= restdef->is_not_null;
/*
- * As above, reject generated columns in partitions that
- * are not generated in the parent.
+ * Check for conflicts related to generated columns.
+ *
+ * Same rules as above: generated-ness has to match the
+ * parent, but the contents of the generation expression
+ * can be different.
*/
- if (restdef->generated && !coldef->generated)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
- errmsg("child column \"%s\" specifies generation expression",
- restdef->colname),
- errhint("A child table column cannot be generated unless its parent column is.")));
- /* Other way around should have been dealt with above */
- Assert(!(coldef->generated && !restdef->generated));
+ if (coldef->generated)
+ {
+ if (restdef->raw_default && !restdef->generated)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
+ errmsg("column \"%s\" inherits from generated column but specifies default",
+ restdef->colname)));
+ if (restdef->identity)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
+ errmsg("column \"%s\" inherits from generated column but specifies identity",
+ restdef->colname)));
+ }
+ else
+ {
+ if (restdef->generated)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
+ errmsg("child column \"%s\" specifies generation expression",
+ restdef->colname),
+ errhint("A child table column cannot be generated unless its parent column is.")));
+ }
/*
* Override the parent's default value for this column