David Rowley <david.row...@2ndquadrant.com> writes: > On 23 June 2016 at 11:22, Tom Lane <t...@sss.pgh.pa.us> wrote: >> The behavior that I'd expect (and that I documented) for a deserialization >> function is that it just allocates its result in the current, short-lived >> memory context, since it will be the combine function's responsibility to >> merge that into the long-lived transition state. But it looks to me like >> the deserialization functions in numeric.c are allocating their results >> in the aggregate context, which will mean a leak. (For example, >> numeric_avg_deserialize creates its result using makeNumericAggState >> which forces the result into the agg context.)
> Yes, you're right. > In the end I decided to add a makeNumericAggStateCurrentContext() > function which does not perform any memory context switching at all. > It seems like this can be used for the combine functions too, since > they've already switched to the aggregate memory context. This should > save a few cycles during aggregate combine, and not expend any extra > as some alternatives, like adding a flag to makeNumericAggState(). You missed the ones using makePolyNumAggState --- I fixed that and pushed it. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers