Avoid leaking memory while evaluating arguments for a table function.
Tom Lane <tgl@sss.pgh.pa.us>
Avoid leaking memory while evaluating arguments for a table function. ExecMakeTableFunctionResult evaluated the arguments for a function-in-FROM in the query-lifespan memory context. This is insignificant in simple cases where the function relation is scanned only once; but if the function is in a sub-SELECT or is on the inside of a nested loop, any memory consumed during argument evaluation can add up quickly. (The potential for trouble here had been foreseen long ago, per existing comments; but we'd not previously seen a complaint from the field about it.) To fix, create an additional temporary context just for this purpose. Per an example from MauMau. Back-patch to all active branches.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/executor/execQual.c | modified | +11 −4 |
| src/backend/executor/nodeFunctionscan.c | modified | +16 −0 |
| src/include/executor/executor.h | modified | +1 −0 |
| src/include/nodes/execnodes.h | modified | +2 −0 |