From: | matt(at)byrney(dot)com |
---|---|
To: | "Craig Ringer" <craig(at)2ndQuadrant(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Maintaining state across function calls |
Date: | 2012-11-19 14:09:29 |
Message-ID: | 5493c927d901b76d5973db3d6ad89db3.squirrel@localhost |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> On 11/19/2012 08:41 PM, matt(at)byrney(dot)com wrote:
>> I want to process all the records in a table through a C-language (well,
>> C++) function (i.e. one function call per row of the table) in such a
>> way
>> that the function hangs onto its internal state across calls. Something
>> like
>>
>> SELECT my_function(a, b, c) FROM my_table ORDER BY d;
>>
>> The value returned in the last row of the table would be the result I'm
>> looking for. (This could be neatened up by using a custom aggregate and
>> putting my calculation in the sfunc but that's a minor detail).
> [snip]
>> Alternatively, use this in a custom aggregate and make the ffunc do the
>> garbage collection, which should prevents leakage altogether.
> You don't generally need to do this cleanup yourself. Use appropriate
> palloc memory contexts and it'll be done for you when the memory context
> is destroyed.
>
> I would want to implement this as an aggregate using the standard
> aggregate / window function machinery. Have a look at how the existing
> aggregates like string_agg are implemented in the Pg source code.
Thanks for your reply. A follow-up question: to use the palloc/pfree
functions with a C++ STL container, do I simply give the container an
allocator which uses palloc and pfree instead of the default allocator,
which uses new and delete?
Matt
From | Date | Subject | |
---|---|---|---|
Next Message | Merlin Moncure | 2012-11-19 14:33:22 | Re: High SYS CPU - need advise |
Previous Message | Stephen Frost | 2012-11-19 13:43:45 | Re: Prepared Statement Name Truncation |