git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: fd1afdb)
Simplify coding to detach constraints when detaching partition
2019年1月24日 14:18:35 +0000 (11:18 -0300)
2019年1月24日 14:25:29 +0000 (11:25 -0300)
The original coding was too baroque and led to an use-after-release
mistake, noticed by buildfarm member prion.

Discussion: https://postgr.es/m/21693.1548305934@sss.pgh.pa.us


diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 738c1781078261dd568a4d2d4daa9d4433012257..887c19c3eff9c79916d579d3ce09454678cfc0ab 100644 (file)
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -15106,24 +15106,14 @@ 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)
- continue;
+ /* If there's a constraint associated with the index, detach it too */
constrOid = get_relation_idx_constraint_oid(RelationGetRelid(partRel),
idxid);
- if (!OidIsValid(constrOid))
- elog(ERROR, "missing pg_constraint entry of index \"%s\" of partition \"%s\"",
- RelationGetRelationName(idx),
- RelationGetRelationName(partRel));
+ if (OidIsValid(constrOid))
+ ConstraintSetParentConstraint(constrOid, InvalidOid);
- ConstraintSetParentConstraint(constrOid, InvalidOid);
+ index_close(idx, NoLock);
}
table_close(classRel, RowExclusiveLock);
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /