Re: executor relation handling
Amit Langote <langote_amit_f8@lab.ntt.co.jp>
On 2018/10/08 9:29, David Rowley wrote: > On 8 October 2018 at 13:13, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> The idea I had in mind was to allow hard pruning of any leaf that's >> been excluded *at plan time* based on partition constraints seen in >> its parent rel(s). That should be safe enough as long as we take >> locks on all the non-leaf rels --- then we'd know about any change >> in the constraint situation. >> >> Rather than coping with renumbering the RTEs, it might be easiest >> to invent an "RTE_DUMMY" RTE type that a hard-pruned RTE could be >> changed to. > > The problem with that is that, if we get [1] done in PG12, then the > RTE_DUMMYs would not exist, as we'd only have RTEs in the range table > for partitions that survived plan-time pruning. ... > [1] https://commitfest.postgresql.org/20/1778/ Yeah, the patch proposed at [1] postpones creating partition RTEs (hence locking them) to a point after pruning, which also means we create only the necessary RTEs. In fact, it's not just the RTEs, but child PlanRowMarks, whose creation is postponed to after pruning. So, I admitted upthread that my proposed patch here would only add code that will become useless if we're able to get [1] in. Thanks, Amit
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