Robert Haas <robertmh...@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_irsaq1taus...@mail.gmail.com