• Tom Lane's avatar
    Allow aggregates to provide estimates of their transition state data size. · 6cb86143
    Tom Lane authored
    Formerly the planner had a hard-wired rule of thumb for guessing the amount
    of space consumed by an aggregate function's transition state data.  This
    estimate is critical to deciding whether it's OK to use hash aggregation,
    and in many situations the built-in estimate isn't very good.  This patch
    adds a column to pg_aggregate wherein a per-aggregate estimate can be
    provided, overriding the planner's default, and infrastructure for setting
    the column via CREATE AGGREGATE.
    
    It may be that additional smarts will be required in future, perhaps even
    a per-aggregate estimation function.  But this is already a step forward.
    
    This is extracted from a larger patch to improve the performance of numeric
    and int8 aggregates.  I (tgl) thought it was worth reviewing and committing
    this infrastructure separately.  In this commit, all built-in aggregates
    are given aggtransspace = 0, so no behavior should change.
    
    Hadi Moshayedi, reviewed by Pavel Stehule and Tomas Vondra
    6cb86143
opr_sanity.sql 41.3 KB