From: Heikki Linnakangas Date: Sat, 21 May 2011 18:30:11 +0000 (-0400) Subject: Reset per-tuple memory context between every row in a scan node, even when X-Git-Tag: REL9_1_BETA2~98 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0319da638f337cae66a4649581dc1f33d5079e1a;p=postgresql Reset per-tuple memory context between every row in a scan node, even when there's no quals or projections. Currently this only matters for foreign scans, as none of the other scan nodes litter the per-tuple memory context when there's no quals or projections. --- diff --git a/src/backend/executor/execScan.c b/src/backend/executor/execScan.c index 5089616f59..e90058847d 100644 --- a/src/backend/executor/execScan.c +++ b/src/backend/executor/execScan.c @@ -120,13 +120,17 @@ ExecScan(ScanState *node, */ qual = node->ps.qual; projInfo = node->ps.ps_ProjInfo; + econtext = node->ps.ps_ExprContext; /* * If we have neither a qual to check nor a projection to do, just skip * all the overhead and return the raw scan tuple. */ if (!qual && !projInfo) + { + ResetExprContext(econtext); return ExecScanFetch(node, accessMtd, recheckMtd); + } /* * Check to see if we're still projecting out tuples from a previous scan @@ -148,7 +152,6 @@ ExecScan(ScanState *node, * storage allocated in the previous tuple cycle. Note this can't happen * until we're done projecting out tuples from a scan tuple. */ - econtext = node->ps.ps_ExprContext; ResetExprContext(econtext); /*