diff --git a/src/pl/plpython/plpy_spi.c b/src/pl/plpython/plpy_spi.c index ff87b27de0..2fa6688f2e 100644 --- a/src/pl/plpython/plpy_spi.c +++ b/src/pl/plpython/plpy_spi.c @@ -222,6 +222,8 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) PG_TRY(); { PLyExecutionContext *exec_ctx = PLy_current_execution_context(); + MemoryContext scratch_context = PLy_get_scratch_context(exec_ctx); + MemoryContext oldcontext; char *volatile nulls; volatile int j; @@ -230,6 +232,8 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) else nulls = NULL; + MemoryContextReset(scratch_context); + oldcontext = MemoryContextSwitchTo(scratch_context); for (j = 0; j < nargs; j++) { PLyObToDatum *arg = &plan->args[j]; @@ -249,6 +253,7 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit) } PG_END_TRY(2); } + MemoryContextSwitchTo(oldcontext); rv = SPI_execute_plan(plan->plan, plan->values, nulls, exec_ctx->curr_proc->fn_readonly, limit);