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;
|
break;
|
||||||
|
|
||||||
case RTE_SUBQUERY:
|
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 */
|
/* Recurse into subquery-in-FROM */
|
||||||
ScanQueryForLocks(rte->subquery, acquire);
|
ScanQueryForLocks(rte->subquery, acquire);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user