• Tom Lane's avatar
    Create infrastructure for moving-aggregate optimization. · a9d9acbf
    Tom Lane authored
    Until now, when executing an aggregate function as a window function
    within a window with moving frame start (that is, any frame start mode
    except UNBOUNDED PRECEDING), we had to recalculate the aggregate from
    scratch each time the frame head moved.  This patch allows an aggregate
    definition to include an alternate "moving aggregate" implementation
    that includes an inverse transition function for removing rows from
    the aggregate's running state.  As long as this can be done successfully,
    runtime is proportional to the total number of input rows, rather than
    to the number of input rows times the average frame length.
    
    This commit includes the core infrastructure, documentation, and regression
    tests using user-defined aggregates.  Follow-on commits will update some
    of the built-in aggregates to use this feature.
    
    David Rowley and Florian Pflug, reviewed by Dean Rasheed; additional
    hacking by me
    a9d9acbf
window.sql 16 KB