Re: BUG #17709: Regression in PG15 with window functions - "WindowFunc not found in subplan target lists"
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: David Rowley <dgrowleyml@gmail.com>
Cc: makhmutov@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2022-12-09T14:01:21Z
Lists: pgsql-bugs
On Fri, Dec 9, 2022 at 7:53 PM David Rowley <dgrowleyml@gmail.com> wrote: > The additional thing that seems to cause the reported error is that > once the subquery is pulled up, the run condition also needs a round > of constant folding done. See subquery_planner() around line 827. The > problem is that the target list's WindowFunc ends up with count(1) > over .., but the run condition's one is left as count(case 1 when 1 > then 1 else null end), which preprocess_expression() will fold into > the same as what's in the target list. Yes exactly. That's what we also have to do. I was debugging with a simplified version of the query with the WindowFunc as count(t1.a) over (...) and did not realize constant folding is also needed for the runCondition. > I'm now wondering if WindowClause.runCondition should be of type Node > * instead of List *. I'd have imagined I should be passing the type of > EXPRKIND_QUAL to preprocess_expression's type, but canonicalize_qual() > does not like Lists. I'm not sure about this. From how the runCondition is constructed in find_window_run_conditions, it seems there is no need to canonicalize it. Thanks Richard
Commits
-
Add subquery pullup handling for WindowClause runCondition
- 04788ee4c5ef 15.2 landed
- 94985c21020a 16.0 landed
-
Teach planner and executor about monotonic window funcs
- 9d9c02ccd1ae 15.0 cited