I have started testing partition-wise-aggregate and got one observation, please take a look. with the v2 patch, here if I change target list order, query is not picking full partition-wise-aggregate.
Thanks Rajkumar for reporting this.
I am looking into this issue and will post updated patch with the fix.
Logic for checking whether partition keys lead group by keys needs to be updated here. The group by expressions can appear in any order without affecting the final result. And thus, the need for partition keys should be leading the group by keys to have full aggregation is not mandatory. Instead we must ensure that the partition keys are part of the group by keys to compute full aggregation on a partition.
Attached, revised patch-set with above fix.
Also, in test-cases, I have removed DROP/ANALYZE commands on child relations and also removed VERBOSE from the EXPLAIN.
while testing latest v3 patches, I am getting a server crash if I reset partition_wise_agg_cost_factor, please take a look.
CREATE TABLE lp (a TEXT, b FLOAT, c INT) PARTITION BY LIST(c); CREATE TABLE lp1 PARTITION OF lp FOR VALUES IN (10,20); CREATE TABLE lp2 PARTITION OF lp FOR VALUES IN (30,40);
INSERT INTO lp VALUES ('a1',800, 20); INSERT INTO lp VALUES ('a2',1250,30); INSERT INTO lp VALUES ('a3',2975,20); INSERT INTO lp VALUES ('a3',2850,30);
postgres=# SET enable_partition_wise_agg TO true; SET postgres=# SET partition_wise_agg_cost_factor TO 0.5; SET postgres=# postgres=# SELECT MAX(b), AVG(b) FROM lp GROUP BY a HAVING a = 'a3' ORDER BY 1,2; max | avg ------+-------- 2975 | 2912.5 (1 row)
postgres=# RESET partition_wise_agg_cost_factor; RESET postgres=# postgres=# SELECT MAX(b), AVG(b) FROM lp GROUP BY a HAVING a = 'a3' ORDER BY 1,2; 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: Failed. !>