Great, thanks On 15 June 2017 at 22:07, Tom Lane <tgl@xxxxxxxxxxxxx> wrote: > Gabriel Furstenheim Milerud <furstenheim@xxxxxxxxx> writes: >> I've written an extension in C to sum jsonb. For that I use the >> jsonbiterator defined in >> https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/jsonb_util.c#L743 > >> In the comments of JsonbIteratorNext it states: 'Callers in such a >> scenario, that are particularly sensitive to leaking memory in a >> long-lived context may walk the ancestral tree from the final iterator >> we left them with to its oldest ancestor, pfree()ing as they go' > >> In the extension that I've written, I sometimes stop in the middle of >> an iteration, but only to raise an error (if the json contains a not >> numeric value), with 'ereport(ERROR, ...' > >> Do I have to free the memory in that case? > > I wouldn't bother, assuming that it's all in the short-lived query > context (the one that's current when your function is called). > Error cleanup will flush that context automatically. > > Really, for memory in that context, it's unlikely to matter even > if you are sloppy and leak memory on normal non-error return. > That context will get reset after each row processed by the > query anyway. It's only if you're trying to cache data across > rows, or in even longer-lived ways, that you really need to be > careful. > > 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