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