Hi hackers, ISTM that context switch in `create_cursor()`:
if (numParams > 0) { MemoryContext oldcontext; oldcontext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory); process_query_params(econtext, fsstate->param_flinfo, fsstate->param_exprs, values); MemoryContextSwitchTo(oldcontext); } is redundant since we should already be in `ecxt_per_tuple_memory` context according to `ForeignNext()`. Do I miss some hidden purpose? If not here is a patch that removes it. Regards, Ildar Musin
diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index fd20aa96aa..65962ea657 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -3083,16 +3083,10 @@ create_cursor(ForeignScanState *node) */ if (numParams > 0) { - MemoryContext oldcontext; - - oldcontext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory); - process_query_params(econtext, fsstate->param_flinfo, fsstate->param_exprs, values); - - MemoryContextSwitchTo(oldcontext); } /* Construct the DECLARE CURSOR command */