mirror of https://github.com/postgres/postgres
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
|
@ -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…
Reference in New Issue