diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index aeb6c8fefc..bb08037a94 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -2309,13 +2309,19 @@ exec_stmt_call(PLpgSQL_execstate *estate, PLpgSQL_stmt_call *stmt) * could have been unset already, in case of a recursive call. */ if (expr->plan && !expr->plan->saved) + { + SPI_freeplan(expr->plan); expr->plan = NULL; + } PG_RE_THROW(); } PG_END_TRY(); if (expr->plan && !expr->plan->saved) + { + SPI_freeplan(expr->plan); expr->plan = NULL; + } if (rc < 0) elog(ERROR, "SPI_execute_plan_with_paramlist failed executing query \"%s\": %s",