Acquire locks on views in AcquirePlannerLocks, too.
Commit 47bb9db75 taught AcquireExecutorLocks to re-acquire locks on views using data from their RTE_SUBQUERY replacements, but it now seems like we should make AcquirePlannerLocks do the same. In this way, if a view has been redefined, we will notice that a bit earlier while checking validity of a cached plan and thereby avoid some wasted work. Report and patch by Amit Langote. Discussion: https://postgr.es/m/CA+HiwqH0xZOQ+GQAdKeckY1R4NOeHdzhtfxkAMJLSchpapNk5w@mail.gmail.com
This commit is contained in:
parent
84adc8e20f
commit
65eb2d00c6
8
src/backend/utils/cache/plancache.c
vendored
8
src/backend/utils/cache/plancache.c
vendored
@ -1846,6 +1846,14 @@ ScanQueryForLocks(Query *parsetree, bool acquire)
|
||||
break;
|
||||
|
||||
case RTE_SUBQUERY:
|
||||
/* If this was a view, must lock/unlock the view */
|
||||
if (OidIsValid(rte->relid))
|
||||
{
|
||||
if (acquire)
|
||||
LockRelationOid(rte->relid, rte->rellockmode);
|
||||
else
|
||||
UnlockRelationOid(rte->relid, rte->rellockmode);
|
||||
}
|
||||
/* Recurse into subquery-in-FROM */
|
||||
ScanQueryForLocks(rte->subquery, acquire);
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user