Hi,
On 2023-02-10 20:08:09 -0500, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > I think we could just add a !contain_subplans() to the code deciding whether
> > it's safe to use the movable window optimization?
>
> Yeah, perhaps. That doesn't seem like a mainstream use-case either.
I suspect we ought to backpatch a fix and compared to some other ideas, that
seems not terribly invasive.
> Another idea, tying into your previous point, is to try to check
> contain_volatile_functions in the planner before we've reduced
> sublinks to subplans. I'm not sure that would be convenient to do
> though; subplan-conversion happens pretty early.
Yea, that doesn't seem too promising.
What I was referencing is that we already moved most aggregate processing to
the planner, c.f. preprocess_aggref(), but we didn't do the same for window
functions. Even though there's a lot of similar code there.
To fix the bug, we could just do a minimal version of that, I think, and add a
new field to WindowFunc, that we populate somewhere around
optimize_window_clauses().
Perhaps we ought to add something similar to parallel_safe to SubPlan?
> (I'm quite hesitant to move the goalposts on what
> contain_volatile_functions detects. As that comment indicates,
> some thought has gone into its current behavior, and I think
> we might hit some unwanted side-effects if we change it.)
Agreed. We could have a second "interface" function, using the same caller
though. But afaics, without adding information to the SubPlan nodes, we can't
really do better anyway?
Greetings,
Andres Freund