Search Postgresql Archives

Re: Question about using AggCheckCallContext in a C function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Matt Solnit <msolnit@xxxxxxxxxx> 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


-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux