Re: json(b)_array_elements use causes very large memory usage when also referencing entire json document

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Lucas Fairchild-Madar <lucas.madar@gmail.com>, pgsql-bugs@postgresql.org
Date: 2017-10-07T02:42:05Z
Lists: pgsql-bugs
On 2017-10-06 22:35:37 -0400, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > I've just played around with this. ValuePerCall SRFs are fine with
> > called in a short-lived context (they're required to be able to, as
> > documented in xfunc.sgml), so is SFRM_Materialize. The only thing to be
> > careful about is the *arguments* to the function, those need to live
> > long enough in the ValuePerCall case.
> 
> Isn't there already code to deal with that?  See around line 175
> in execSRF.c.

Well, that's for nodeFunctionscan.c, not nodeProjectSet.c. But it seems
quite sensible to model this very similarly.

I'd still like to unify those two functions, but given that
ExecMakeTableFunctionResult materializes ValuePerCall SRFs, that doesn't
seem likely.

Greetings,

Andres Freund


Commits

  1. Reduce memory usage of targetlist SRFs.

  2. Fix intra-query memory leakage in nodeProjectSet.c.