diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 7e7703c7997..179eab10c84 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -22367,16 +22367,17 @@ createTableConstraints(List **wqueue, AlteredTableInfo *tab, * modelRel check constraint expresssion may reference tableoid, so later in * moveMergedTablesRows, we need evulate the check constraint again for the * newRel. We can check weather check constraint contain tableoid reference - * or not via pull_varattnos. But unconditionaly revaulate check cosntraint - * seems more safe. + * or not via pull_varattnos. */ foreach_ptr(CookedConstraint, ccon, cookedConstraints) { if (!ccon->skip_validation && ccon->contype == CONSTR_CHECK) { + Node *qual; Bitmapset *attnums = NULL; - pull_varattnos((Node *) ccon->expr, 1, &attnums); + qual = expand_generated_columns_in_expr(ccon->expr, newRel, 1); + pull_varattnos(qual, 1, &attnums); /* * Add check only if it contains tableoid @@ -22390,7 +22391,7 @@ createTableConstraints(List **wqueue, AlteredTableInfo *tab, newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); newcon->name = ccon->name; newcon->contype = ccon->contype; - newcon->qual = ccon->expr; + newcon->qual = qual; tab->constraints = lappend(tab->constraints, newcon); }