Re: executor relation handling
Tom Lane <tgl@sss.pgh.pa.us>
Attachments
- check-relation-lock-held-1.patch (text/x-diff) patch
I wrote: > 1. You set up transformRuleStmt to insert AccessExclusiveLock into > the "OLD" and "NEW" RTEs for a view. This is surely wrong; we do > not want to take exclusive lock on a view just to run a query using > the view. It should (usually, anyway) just be AccessShareLock. > However, because addRangeTableEntryForRelation insists that you > hold the requested lock type *now*, just changing the parameter > to AccessShareLock doesn't work. > I hacked around this for the moment by passing NoLock to > addRangeTableEntryForRelation and then changing rte->lockmode > after it returns, but man that's ugly. It makes me wonder whether > addRangeTableEntryForRelation should be checking the lockmode at all. It occurred to me that it'd be reasonable to insist that the caller holds a lock *at least as strong* as the one being recorded in the RTE, and that there's also been discussions about verifying that some lock is held when something like heap_open(foo, NoLock) is attempted. So I dusted off the part of 0001 that did that, producing the attached delta patch. Unfortunately, I can't commit this, because it exposes at least two pre-existing bugs :-(. So we'll need to fix those first, which seems like it should be a separate thread. I'm just parking this here for the moment. I think that the call sites should ultimately look like Assert(CheckRelationLockedByMe(...)); but for hunting down the places where the assertion currently fails, it's more convenient if it's just an elog(WARNING). regards, tom lane
Commits
-
Avoid O(N^2) cost in ExecFindRowMark().
- f9eb7c14b08d 12.0 landed
-
Remove some unnecessary fields from Plan trees.
- 52ed730d511b 12.0 landed
-
Restore sane locking behavior during parallel query.
- 29ef2b310da9 12.0 landed
-
Remove more redundant relation locking during executor startup.
- f2343653f5b2 12.0 landed
-
In the executor, use an array of pointers to access the rangetable.
- d73f4c74dd34 12.0 landed
-
Centralize executor's opening/closing of Relations for rangetable entries.
- 9ddef36278a9 12.0 landed
-
Change executor to just Assert that table locks were already obtained.
- 9a3cebeaa7fd 12.0 landed
-
Change rewriter/planner/executor/plancache to depend on RTE rellockmode.
- 6e35939febf8 12.0 landed
-
Add assertions that we hold some relevant lock during relation open.
- b04aeb0a053e 12.0 landed
-
Create an RTE field to record the query's lock mode for each relation.
- fdba460a26af 12.0 landed