Re: generic plans and "initial" pruning
Tom Lane <tgl@sss.pgh.pa.us>
Robert Haas <robertmhaas@gmail.com> writes: > That's not quite my question, though. Why do we ever build a non-flat > range table in the first place? Like, instead of assigning indexes > relative to the current subquery level, why not just assign them > relative to the whole query from the start? We could probably make that work, but I'm skeptical that it would really be an improvement overall, for a couple of reasons. (1) The need for merge-rangetables-and-renumber-Vars logic doesn't go away. It just moves from setrefs.c to the rewriter, which would have to do it when expanding views. This would be a net loss performance-wise, I think, because setrefs.c can do it as part of a parsetree scan that it has to perform anyway for other housekeeping reasons; but the rewriter would need a brand new pass over the tree. Admittedly that pass would only happen for view replacement, but it's still not open-and-shut that there'd be a performance win. (2) The need for varlevelsup and similar fields doesn't go away, I think, because we need those for semantic purposes such as discovering the query level that aggregates are associated with. That means that subquery flattening still has to make a pass over the tree to touch every Var's varlevelsup; so not having to adjust varno at the same time would save little. I'm not sure whether I think it's a net plus or net minus that varno would become effectively independent of varlevelsup. It'd be different from the way we think of them now, for sure, and I think it'd take awhile to flush out bugs arising from such a redefinition. > I don't really expect that we're ever going to change this -- and > certainly not on this thread. The idea of running around and replacing > RT indexes all over the tree is deeply embedded in the system. But are > we really sure we want to add a second kind of index that we have to > run around and adjust at the same time? You probably want to avert your eyes from [1], then ;-). Although I'm far from convinced that the cross-list index fields currently proposed there are actually necessary; the cost to adjust them during rangetable merging could outweigh any benefit. regards, tom lane [1] https://www.postgresql.org/message-id/flat/CA+HiwqGjJDmUhDSfv-U2qhKJjt9ST7Xh9JXC_irsAQ1TAUsJYg@mail.gmail.com
Commits
-
Stamp 19beta1.
- 4b0bf0788b06 19 (unreleased) cited
-
Revert "Don't lock partitions pruned by initial pruning"
- 1722d5eb05d8 18.0 landed
-
Ensure first ModifyTable rel initialized if all are pruned
- 28317de723b6 18.0 cited
-
Fix bug in cbc127917 to handle nested Append correctly
- cbb9086c9ef6 18.0 landed
-
Remove unstable test suite added by 525392d57
- 4f1b6e5bb4fe 18.0 landed
-
Don't lock partitions pruned by initial pruning
- 525392d5727f 18.0 landed
-
Fix an oversight in cbc127917 to handle MERGE correctly
- 75dfde13639a 18.0 landed
-
Track unpruned relids to avoid processing pruned relations
- cbc127917e04 18.0 landed
-
Perform runtime initial pruning outside ExecInitNode()
- d47cbf474ecb 18.0 landed
-
Move PartitionPruneInfo out of plan nodes into PlannedStmt
- bb3ec16e14de 18.0 landed
-
Fix setrefs.c's failure to do expression processing on prune steps.
- bf826ea06297 18.0 cited
-
Remove obsolete executor cleanup code
- d060e921ea5a 17.0 landed
-
Revert "Move PartitionPruneInfo out of plan nodes into PlannedStmt"
- 5472743d9e85 16.0 landed
-
Move PartitioPruneInfo out of plan nodes into PlannedStmt
- ec386948948c 16.0 landed
-
Refactor and cleanup runtime partition prune code a little
- 297daa9d4353 15.0 landed
-
Remove some unnecessary fields from Plan trees.
- 52ed730d511b 12.0 cited
-
Remove more redundant relation locking during executor startup.
- f2343653f5b2 12.0 cited
-
Shut down Gather's children before shutting down Gather itself.
- acf555bc53ac 10.0 cited