From: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Pg Bugs <pgsql-bugs(at)postgresql(dot)org>, David Rowley <david(dot)rowley(at)2ndquadrant(dot)com> |
Subject: | Re: Crash with a CUBE query on 9.6 |
Date: | 2016-12-20 07:24:31 |
Message-ID: | ba984535-2b60-3fb9-f9ec-83279ed7c64b@iki.fi |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On 12/19/2016 11:22 PM, Tom Lane wrote:
> Heikki Linnakangas <hlinnaka(at)iki(dot)fi> writes:
>> On 12/19/2016 09:37 PM, Tom Lane wrote:
>>> Probably, the loop in finalize_aggregates needs to be split into two,
>>> one over the pertrans states and then a second one over the peragg states.
>>> But this code has been hacked up enough since I last looked at it that
>>> I'm hesitant to try to fix it myself.
>
>> Yes, that seems straightforward. I came up with the attached. Will
>> commit tomorrow, barring objections.
>
> Code patch looks reasonable, but I do not get a crash on the proposed test
> case with current code. I suspect that integer avg() and sum() don't
> actually share transstates, making the test case a bit off-point.
Hmm, it does crash here:
postgres=# select my_avg(distinct one),my_sum(distinct one) from
(values(1),(3),(1)) t(one);
NOTICE: avg_transfn called with 1
NOTICE: avg_transfn called with 3
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
In the patch I sent yesterday, the expected output was wrong, though.
The query there didn't use DISTINCT, so it didn't crash.
Also note that the test case uses my_avg() and my_sum() rather than the
built-ins. If you replace them with the built-ins, it indeed doesn't
crash because sum(int) and avg(int) have different transition functions.
But this does crash with the built-ins, too:
postgres=# select avg(distinct one::numeric), sum(distinct one::numeric)
from (values(1),(3),(1)) t(one);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
Fixed the expected output, and committed. Thanks!
- Heikki
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2016-12-20 07:25:13 | Re: Crash with a CUBE query on 9.6 |
Previous Message | Michael Paquier | 2016-12-20 06:42:23 | Re: 9.6rc1 Background worker starting multiple times |