Re: Crash with a CUBE query on 9.6
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Pg Bugs <pgsql-bugs@postgresql.org>,
David Rowley <david.rowley@2ndquadrant.com>
Date: 2016-12-19T19:37:20Z
Lists: pgsql-bugs
Heikki Linnakangas <hlinnaka@iki.fi> writes: > The attached test case crashes on REL9_6_STABLE and master. On 9.5, it > worked. As best I can tell, this is the fault of commit 804163bc2. The problem query can be simplified to SELECT STDDEV(DISTINCT floor(sale.cn)), AVG(DISTINCT floor(sale.cn)) FROM sale,vendor WHERE sale.vn=vendor.vn GROUP BY CUBE((sale.cn,sale.dt,sale.dt),(sale.pn,sale.prc),(sale.qty,sale.vn)),sale.qty order by 1,2 ; The two aggregates share a "pertrans" state, but finalize_aggregates does not account for that and calls process_ordered_aggregate_single() twice on the same pertrans state. The second time crashes because we already deleted the tuplesort object the first time. 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. regards, tom lane
Commits
-
Fix sharing Agg transition state of DISTINCT or ordered aggs.
- ce92fc4e2540 9.6.2 landed
- db80acfc9d50 10.0 landed
-
Share transition state between different aggregates when possible.
- 804163bc25e9 9.6.0 cited