From 0a6839e544e2a99b1e81788a48072a914cbfcbaf Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Thu, 11 Feb 2016 19:42:31 +0200 Subject: [PATCH] Perform distributed planning in the calling memory context Previously we used, for historical reasons, MessageContext. That is problematic if a single message from the client causes a lot of statements to be planned. E.g. for the copy_to_distributed_table script one insert statement is planned for each row inserted via COPY, and only freed when COPY has finished. --- src/backend/distributed/planner/multi_planner.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/backend/distributed/planner/multi_planner.c b/src/backend/distributed/planner/multi_planner.c index 93d05817e..e6cd82b50 100644 --- a/src/backend/distributed/planner/multi_planner.c +++ b/src/backend/distributed/planner/multi_planner.c @@ -52,19 +52,10 @@ multi_planner(Query *parse, int cursorOptions, ParamListInfo boundParams) if (NeedsDistributedPlanning(parse)) { - MemoryContext oldcontext = NULL; - MultiPlan *physicalPlan = NULL; - - /* Switch to top level message context */ - oldcontext = MemoryContextSwitchTo(MessageContext); - - physicalPlan = CreatePhysicalPlan(parse); + MultiPlan *physicalPlan = CreatePhysicalPlan(parse); /* store required data into the planned statement */ result = MultiQueryContainerNode(result, physicalPlan); - - /* Now switch back to original context */ - MemoryContextSwitchTo(oldcontext); } return result;