Re: Parallelized polymorphic aggs, and aggtype vs aggoutputtype - Mailing list pgsql-hackers

From Noah Misch
Subject Re: Parallelized polymorphic aggs, and aggtype vs aggoutputtype
Date
Msg-id 20160627020158.GA1319154@tornado.leadboat.com
Whole thread Raw
In response to Re: Parallelized polymorphic aggs, and aggtype vs aggoutputtype  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Parallelized polymorphic aggs, and aggtype vs aggoutputtype
List pgsql-hackers
On Thu, Jun 23, 2016 at 10:57:26AM -0400, Tom Lane wrote:
> David Rowley <david.rowley@2ndquadrant.com> writes:
> > On 23 June 2016 at 11:22, Tom Lane <tgl@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.

What, if anything, is yet required to close this 9.6 open item?



pgsql-hackers by date:

Previous
From: David Rowley
Date:
Subject: Re: Rethinking representation of partial-aggregate steps
Next
From: Noah Misch
Date:
Subject: Re: Should phraseto_tsquery('simple', 'blue blue') @@ to_tsvector('simple', 'blue') be true ?