diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 738c178107..98366a2d5b 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -15095,6 +15095,7 @@ ATExecDetachPartition(Relation rel, RangeVar *name) { Oid idxid = lfirst_oid(cell); Relation idx; + bool detachConstraint = false; Oid constrOid; if (!has_superclass(idxid)) @@ -15106,14 +15107,18 @@ ATExecDetachPartition(Relation rel, RangeVar *name) idx = index_open(idxid, AccessExclusiveLock); IndexSetParentIndex(idx, InvalidOid); update_relispartition(classRel, idxid, false); - index_close(idx, NoLock); /* * Detach any constraints associated with the index too. Only UNIQUE * and PRIMARY KEY index constraints can be inherited, so no need * to check for others. */ - if (!idx->rd_index->indisprimary && !idx->rd_index->indisunique) + if (idx->rd_index->indisprimary || idx->rd_index->indisunique) + detachConstraint = true; + + index_close(idx, NoLock); + + if (!detachConstraint) continue; constrOid = get_relation_idx_constraint_oid(RelationGetRelid(partRel),