Re: EXPLAIN(VERBOSE) to CTE with SEARCH BREADTH FIRST fails
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: Andrew Dunstan <andrew@dunslane.net>,
torikoshia <torikoshia@oss.nttdata.com>,
Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2021-09-15T23:40:31Z
Lists: pgsql-hackers
Attachments
- fix-explain-for-search-breadth-first-1.patch (text/x-diff) patch
I wrote: > I do not think that patch is a proper solution, but we do need to do > something about this. I poked into this and decided it's an ancient omission within ruleutils.c. The reason we've not seen it before is probably that you can't get to the case through the parser. The SEARCH stuff is generating a query structure basically equivalent to regression=# with recursive cte (x,r) as ( select 42 as x, row(i, 2.3) as r from generate_series(1,3) i union all select x, row((c.r).f1, 4.5) from cte c ) select * from cte; ERROR: record type has not been registered and as you can see, expandRecordVariable fails to figure out what the referent of "c.r" is. I think that could be fixed (by looking into the non-recursive term), but given the lack of field demand, I'm not feeling that it's urgent. So the omission is pretty obvious from the misleading comment: actually, Vars referencing RTE_CTE RTEs can also appear in WorkTableScan nodes, and we're not doing anything to support that. But we only reach this code when trying to resolve a field of a Var of RECORD type, which is a case that it seems like the parser can't produce. It doesn't look too hard to fix: we just have to find the RecursiveUnion that goes with the WorkTableScan, and drill down into that, much as we would do in the CteScan case. See attached draft patch. I'm too tired to beat on this heavily or add a test case, but I have verified that it passes check-world and handles the example presented in this thread. regards, tom lane
Commits
-
Fix EXPLAIN of SEARCH BREADTH FIRST queries some more.
- 39ae0ef85613 15.0 landed
- 2c25db32eedb 14.1 landed
-
Fix EXPLAIN to handle SEARCH BREADTH FIRST queries.
- 3f50b8263963 15.0 landed
- 388726753b63 14.0 landed
-
Message style improvements
- 4ac0f450b698 15.0 cited