• Tom Lane's avatar
    Prevent sharing transition states between ordered-set aggregates. · 52328727
    Tom Lane authored
    This ought to work, but the built-in OSAs are not capable of coping,
    because their final-functions destructively modify their transition
    state (specifically, the contained tuplesort object).  That was fine
    when those functions were written, but commit 804163bc moved the
    goalposts without telling orderedsetaggs.c.
    
    We should fix the built-in OSAs to support this, but it will take
    a little work, especially if we don't want to sacrifice performance
    in the normal non-shared-state case.  Given that it took a year after
    9.6 release for anyone to notice this bug, we should not prioritize
    sharable-state over nonsharable-state performance.  And a proper fix
    is likely to be more complicated than we'd want to back-patch, too.
    
    Therefore, let's just put in this stop-gap patch to prevent nodeAgg.c
    from choosing to use shared state for OSAs.  We can revert it in HEAD
    when we get a better fix.
    
    Report from Lukas Eder, diagnosis by me, patch by David Rowley.
    Back-patch to 9.6 where the problem was introduced.
    
    Discussion: https://postgr.es/m/CAB4ELO5RZhOamuT9Xsf72ozbenDLLXZKSk07FiSVsuJNZB861A@mail.gmail.com
    52328727
nodeAgg.c 129 KB