Re: BUG #17777: An assert failed in nodeWindowAgg.c
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, xinwen@stu.scu.edu.cn, pgsql-bugs@lists.postgresql.org
Date: 2023-02-13T03:21:11Z
Lists: pgsql-bugs
On Mon, 13 Feb 2023 at 13:46, Andres Freund <andres@anarazel.de> wrote:
> What about find_compatible_agg()? I don't think there's as severe
> consequences, but it also doesn't seem right as-is.
This does not seem related to the issue being reported here. It seems
to me this would only affect the aggregate deduplication logic and
nothing else.
I agree it would be nice if we were more consistent with when volatile
functions are evaluated and when they are not. There are also a bunch
of weird issues with SRFs as I highlighted in [1].
The following shows another case where we change the volatile function
evaluation. This one we do on purpose, which might or might not be
good, depending on if you wanted the random() in the targetlist for
the same purpose as the random() in the ORDER BY.
# select random(), random(), random();
random | random | random
---------------------+---------------------+--------------------
0.15295030404849452 | 0.34841025373624745 | 0.7195551260981239
# select random(), random(), random() order by random();
random | random | random
--------------------+--------------------+--------------------
0.8569677358482639 | 0.8569677358482639 | 0.8569677358482639
It was just last week I wrote a query to fetch a random row from a
table by using ORDER BY random() LIMIT 1; I also needed to call
random() somewhere else in the query for something unrelated but this
deduplication behaviour caused that not to work the way I wanted it
to. This caused my unrelated random() value to be consistently very
low due to it being shared with the random() for the sort. I had to
add a subquery for the 2nd random() to fix the problem.
For the case you're complaining about, I don't think shifting the
goalposts randomly in back-branches is a good idea. For the one you
reported we might upset someone who has come to rely on the aggstate
deduplication either for performance or for the number of volatile
function evaluations. I'm not really on board with changing that
unless someone highlights that it's causing an actual problem.
David
[1] https://postgr.es/m/CAApHDvqKO00nNQtchBs65VTfjEMUsYiB5r2P4VUreTdXE9RY1g@mail.gmail.com
Commits
-
Disable WindowAgg inverse transitions when subplans are present
- 836c31ba508c 16.0 landed
- a9fa6d79aded 15.3 landed
- 4aa43ba21846 14.8 landed
- 301eb3ee4ecd 13.11 landed
- ac55abd33537 12.15 landed
- 8d2a8581b6d6 11.20 landed