From 053ad56d275d343b407bc5fd389bad6f3e340562 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 20 Dec 2018 16:42:13 -0300 Subject: [PATCH] Fix lock level used for partition when detaching it For probably bogus reasons, we acquire only AccessShareLock on the partition when we try to detach it from its parent partitioned table. This can cause ugly things to happen if another transaction is doing any sort of DDL to the partition concurrently. Upgrade that lock to ShareUpdateExclusiveLock, which per discussion seems to be the minimum needed. Reported by Robert Haas. Discussion: https://postgr.es/m/CA+TgmoYruJQ+2qnFLtF1xQtr71pdwgfxy3Ziy-TxV28M6pEmyA@mail.gmail.com --- src/backend/commands/tablecmds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 6543eedc3a..1dae356360 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -14726,7 +14726,7 @@ ATExecDetachPartition(Relation rel, RangeVar *name) if (OidIsValid(defaultPartOid)) LockRelationOid(defaultPartOid, AccessExclusiveLock); - partRel = heap_openrv(name, AccessShareLock); + partRel = heap_openrv(name, ShareUpdateExclusiveLock); /* All inheritance related checks are performed within the function */ RemoveInheritance(partRel, rel);