On Fri, Apr 28, 2017 at 3:03 AM, Antonin Houska <a...@cybertec.at> wrote: > I think this is not generic enough because the result of the Append plan can > be joined to another relation. As such a join can duplicate the > already-aggregated values, the aggregates should not be finalized below the > top-level plan.
If the grouping key matches the partition key, then it's correct to push the entire aggregate down, and there's probably a large performance advantage from avoiding aggregating twice. If the two don't match, then pushing the aggregate down necessarily involves a "partial" and a "finalize" stage, which may or may not be cheaper than doing the aggregation all at once. If you have lots of 2-row groups with 1 row in the first branch of the append and 1 row in the second branch of the append, breaking the aggregate into two steps is probably going to be a loser. If the overall number of groups is small, it's probably going to win. But when the grouping key matches the partition key, so that two-stage aggregation isn't required, I suspect the pushdown should almost always win. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (email@example.com) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers