check_constraint_if_it_contains_tableoid.no-cfbot
application/octet-stream
Filename: check_constraint_if_it_contains_tableoid.no-cfbot
Type: application/octet-stream
Part: 0
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);
}