> But if the column names are ambiguous within the same RTE, how does > table-qualification fix that? And it's within-the-same-RTE that > we're concerned with here
> It only takes one case to mean we have to deal with it ;-). But I'm > fairly sure that there are many other cases, since the parser doesn't > restrict the output names of a sub-SELECT to be unique. good point. I see the error in my original line of thinking now. In fact, it's this simple to prove that we still need to unique-ify something like this subquery is valid: select * from (select 1 a, 2 a) as s > I had a thought about this: I don't think EXPLAIN is ever required > to print the names of join alias variables (since the planner flattens > all join alias variables to some kind of expression over their > underlying columns). So we could skip assigning column names to > join RTEs at all, if we know that it's EXPLAIN rather than view/rule > decompilation. That might let us skip all the mess around > unique-ifying JOIN USING column names, too. That makes sense and a comment inside deparse_context_for_plan_tree describes this from what I can tell. /* * Set up column name aliases. We will get rather bogus results for join * RTEs, but that doesn't matter because plan trees don't contain any join * alias Vars. */ set_simple_column_names(dpns); I suspect that we can also skip RTE_RELATION, since columns must be unique, but I am not sure it's worth the extra effort. At least my test does not show any real benefit. I am attaching a patch that deals with the RTE_JOIN case. # HEAD postgres=# SELECT FROM v1 WHERE false; -- (0 rows) Time: 494.572 ms postgres=# EXPLAIN SELECT FROM v1 WHERE false; QUERY PLAN ------------------------------------------ Result (cost=0.00..0.00 rows=0 width=0) One-Time Filter: false (2 rows) Time: 1236.127 ms (00:01.236) # with the patch applied postgres=# SELECT FROM v1 WHERE false; -- (0 rows) Time: 503.049 ms postgres=# EXPLAIN SELECT FROM v1 WHERE false; QUERY PLAN ------------------------------------------ Result (cost=0.00..0.00 rows=0 width=0) One-Time Filter: false (2 rows) Time: 525.812 ms Regards, Sami
0001-v1-skip-join-RTE-in-deparse_context_for_plan_tree.patch
Description: Binary data