Re: Assert failure in CTE inlining with view and correlated subquery
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Tomas Vondra <tomas.vondra@enterprisedb.com>
Cc: Richard Guo <guofenglinux@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-04-21T19:03:33Z
Lists: pgsql-hackers
Attachments
- remove-bogus-assertion-about-cte-refcount.patch (text/x-diff) patch
Tomas Vondra <tomas.vondra@enterprisedb.com> writes: > On 4/21/22 10:29, Richard Guo wrote: >> Further debugging shows that in this repro the reference to the CTE is >> removed when generating paths for the subquery 'sub', where we would try >> to remove subquery targetlist items that are not needed. So for the >> items we are to remove, maybe we need to check if they contain CTEs and >> if so decrease cterefcount of the CTEs correspondingly. > Right, at some point we remove the unnecessary targetlist entries, but > that ignores the entry may reference a CTE. That's pretty much what I > meant by the counter being "out of sync". > Updating the counter while removing the entry is one option, but maybe > we could simply delay counting the CTE references until after that? I think we should just drop this cross-check altogether; it is not nearly useful enough to justify the work that'd be involved in maintaining cterefcount accurately for all such transformations. All it's really there for is to be sure that we don't need to make a subplan for the inlined CTE. There are two downstream consumers of cte_plan_ids, which currently just have Asserts that we made a subplan. I think it'd be worth converting those to real run-time tests, which leads me to something more or less as attached. regards, tom lane
Commits
-
Remove inadequate assertion check in CTE inlining.
- eade0043caaf 12.11 landed
- e6440d5007aa 13.7 landed
- da22ef388a24 14.3 landed
- 92e7a5375209 15.0 landed