Re: Question about using AggCheckCallContext in a C function

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Question about using AggCheckCallContext in a C function
Дата
Msg-id 24389.1376336837@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Question about using AggCheckCallContext in a C function  (Matt Solnit <msolnit@soasta.com>)
Ответы Re: Question about using AggCheckCallContext in a C function  (Matt Solnit <msolnit@soasta.com>)
Список pgsql-general
Matt Solnit <msolnit@soasta.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


В списке pgsql-general по дате отправления:

Предыдущее
От: Matt Solnit
Дата:
Сообщение: Re: Question about using AggCheckCallContext in a C function
Следующее
От: Joe Van Dyk
Дата:
Сообщение: Why doesn't COPY support the HEADER options for tab-separated output?