Re: Question about using AggCheckCallContext in a C function

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Matt Solnit <msolnit(at)soasta(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Question about using AggCheckCallContext in a C function
Date: 2013-08-12 19:47:17
Message-ID: 24389.1376336837@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Matt Solnit <msolnit(at)soasta(dot)com> writes:
> 2. The function seems to work consistently when I do a SELECT
> SUM(mycol) without any GROUP BY. It's only when I add grouping that
> the failures happen. I'm not sure if this is a real clue or a red
> herring.

That isn't enormously surprising, since the memory management for
the transition values is different in the two cases.

> Finally, can you tell me what precisely happens when you call
> datumCopy() with ArrayType? If it's only returning a copy of
> the TOAST reference, then how is it safe for the transition function
> to modify the content? I'm probably *completely* misunderstanding
> how this works, so I would love to be enlightened :-).

You're right, datumCopy() won't expand a TOAST reference. What does
expand it is PG_GETARG_ARRAYTYPE_P(). So if you have a case where the
system picks up a copy of an array input that happens to be toasted,
it's the GETARG step in the next invocation of the aggregate transition
function that expands the TOAST reference, and then after that you have an
in-memory copy that's safe to modify. Maybe you're missing that somehow?
The code fragment you showed looked okay but ...

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Joe Van Dyk 2013-08-12 21:15:25 Why doesn't COPY support the HEADER options for tab-separated output?
Previous Message Matt Solnit 2013-08-12 19:37:13 Re: Question about using AggCheckCallContext in a C function