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
Message: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands
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);
 			}