From 0ee92e1c9b570f90d043e5b033a19b67497ea1f6 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Thu, 9 Mar 2017 12:05:54 -0500
Subject: [PATCH] Fix a couple of planner bugs in Gather Merge.

Neha Sharma reported these to Rushabh Lathia just after I commit
355d3993c53ed62c5b53d020648e4fbcfbf5f155 went in.  The patch is
Rushabh's, with input from me.
---
 src/backend/optimizer/plan/createplan.c | 3 ++-
 src/backend/optimizer/plan/planner.c    | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index e18c634a7be..d002e6d5672 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -1474,13 +1474,14 @@ create_gather_merge_plan(PlannerInfo *root, GatherMergePath *best_path)
 	Oid		   *sortOperators;
 	Oid		   *collations;
 	bool	   *nullsFirst;
+	List	   *tlist = build_path_tlist(root, &best_path->path);
 
 	/* As with Gather, it's best to project away columns in the workers. */
 	subplan = create_plan_recurse(root, best_path->subpath, CP_EXACT_TLIST);
 
 	/* See create_merge_append_plan for why there's no make_xxx function */
 	gm_plan = makeNode(GatherMerge);
-	gm_plan->plan.targetlist = subplan->targetlist;
+	gm_plan->plan.targetlist = tlist;
 	gm_plan->num_workers = best_path->num_workers;
 	copy_generic_path_info(&gm_plan->plan, &best_path->path);
 
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 209f7696326..02286d9c52f 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -3746,7 +3746,7 @@ create_grouping_paths(PlannerInfo *root,
 						create_gather_merge_path(root,
 												 grouped_rel,
 												 subpath,
-												 NULL,
+												 partial_grouping_target,
 												 root->group_pathkeys,
 												 NULL,
 												 &total_groups);
-- 
GitLab