Re: BUG #18077: PostgreSQL server subprocess crashed by a SELECT statement with WITH clause
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Richard Guo <guofenglinux@gmail.com>
Cc: fuboat@outlook.com, pgsql-bugs@lists.postgresql.org
Date: 2023-09-01T20:41:10Z
Lists: pgsql-bugs
Attachments
- v2-0001-Fix-expanding-Var-of-type-RECORD.patch (text/x-diff) patch v2-0001
Richard Guo <guofenglinux@gmail.com> writes: > On Wed, Aug 30, 2023 at 7:42 PM Richard Guo <guofenglinux@gmail.com> wrote: >> When we expand Var 'c1' from func(c1), we figure out that it comes from >> subquery 's'. When we recurse into subquery 's', we just build an >> additional level of ParseState atop the current ParseState, which seems >> not correct. Shouldn't we climb up by the nesting depth first before we >> build the additional level of ParseState? Something like >> ... > Here is the patch. Yeah, I think your diagnosis is correct. The existing regression tests reach this code path, but not with netlevelsup different from zero. I noted from the code coverage report that the same is true of the nearby RTE_CTE code path: that does have a loop to crawl up the pstate stack, but it isn't getting iterated. The attached improved patch extends the test case so it also covers that. I would have liked to also cover the RTE_JOIN case, which the code coverage report shows to be completely untested. However, I failed to make a test case that reached that. I think it might be a lot harder to reach in the wake of 9ce77d75c, which narrowed the cases in which join alias Vars are created. I also spent a little bit of effort on improving the comments and removing cosmetic differences between the SUBQUERY and CTE cases. regards, tom lane
Commits
-
Track nesting depth correctly when drilling down into RECORD Vars.
- e0e492e5a928 17.0 landed
- d29812c0c6cd 12.17 landed
- c5b7f791dab9 13.13 landed
- ae13f8166dc3 14.10 landed
- a374f6c61681 11.22 landed
- 53630f12d39b 16.1 landed
- 2679a107a152 15.5 landed
-
Fix get_expr_result_type() to find field names for RECORD Consts.
- 8a15b4178c40 12.17 landed
- 59bc0dfe44a6 13.13 landed
- 479b99125dcc 11.22 landed
-
Allow extracting fields from a ROW() expression in more cases.
- ece1154f4c89 11.22 landed
- 2f02d4a2b9cb 12.17 landed