diff --git a/src/backend/distributed/executor/multi_executor.c b/src/backend/distributed/executor/multi_executor.c index 181e9f524..e831e4583 100644 --- a/src/backend/distributed/executor/multi_executor.c +++ b/src/backend/distributed/executor/multi_executor.c @@ -59,9 +59,9 @@ multi_ExecutorStart(QueryDesc *queryDesc, int eflags) { Task *task = NULL; List *taskList = workerJob->taskList; + TupleDesc tupleDescriptor = ExecCleanTypeFromTL( + planStatement->planTree->targetlist, false); List *dependendJobList PG_USED_FOR_ASSERTS_ONLY = workerJob->dependedJobList; - List *workerTargetList = multiPlan->workerJob->jobQuery->targetList; - TupleDesc tupleDescriptor = ExecCleanTypeFromTL(workerTargetList, false); /* router executor can only execute distributed plans with a single task */ Assert(list_length(taskList) == 1); diff --git a/src/backend/distributed/planner/multi_planner.c b/src/backend/distributed/planner/multi_planner.c index e3c899d37..87c6f4185 100644 --- a/src/backend/distributed/planner/multi_planner.c +++ b/src/backend/distributed/planner/multi_planner.c @@ -185,6 +185,9 @@ MultiQueryContainerNode(PlannedStmt *result, MultiPlan *multiPlan) fauxFunctionScan = makeNode(FunctionScan); fauxFunctionScan->functions = lappend(fauxFunctionScan->functions, fauxFunction); + /* copy original targetlist, accessed for RETURNING queries */ + fauxFunctionScan->scan.plan.targetlist = copyObject(result->planTree->targetlist); + /* * Add set returning function to target list if the original (postgres * created) plan doesn't support backward scans; doing so prevents