diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1ada38908c1..18ff8956577 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -11572,6 +11572,21 @@ AttachPartitionForeignKey(List **wqueue, partConstrFrelid = partConstr->confrelid; partConstrRelid = partConstr->conrelid; + /* + * If the referenced table is partitioned, then the partition we're + * attaching now has extra pg_constraint rows and action triggers that are + * no longer needed. Remove those. + */ + if (get_rel_relkind(partConstrFrelid) == RELKIND_PARTITIONED_TABLE) + { + Relation pg_constraint = table_open(ConstraintRelationId, RowShareLock); + + RemoveInheritedConstraint(pg_constraint, trigrel, partConstrOid, + partConstrRelid); + + table_close(pg_constraint, RowShareLock); + } + /* * Will we need to validate this constraint? A valid parent constraint * implies that all child constraints have been validated, so if this one @@ -11608,21 +11623,6 @@ AttachPartitionForeignKey(List **wqueue, TriggerSetParentTrigger(trigrel, updateTriggerOid, parentUpdTrigger, RelationGetRelid(partition)); - /* - * If the referenced table is partitioned, then the partition we're - * attaching now has extra pg_constraint rows and action triggers that are - * no longer needed. Remove those. - */ - if (get_rel_relkind(partConstrFrelid) == RELKIND_PARTITIONED_TABLE) - { - Relation pg_constraint = table_open(ConstraintRelationId, RowShareLock); - - RemoveInheritedConstraint(pg_constraint, trigrel, partConstrOid, - partConstrRelid); - - table_close(pg_constraint, RowShareLock); - } - /* * We updated this pg_constraint row above to set its parent; validating * it will cause its convalidated flag to change, so we need CCI here. In