]> granicus.if.org Git - postgresql/commitdiff
Fix incorrect tlist generation in create_gather_plan().
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 9 Mar 2016 15:56:36 +0000 (10:56 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 9 Mar 2016 15:56:46 +0000 (10:56 -0500)
This function is written as though Gather doesn't project; but it does.
Even if it did not project, though, we must use build_path_tlist to ensure
that the output columns receive correct sortgroupref labeling.

Per report from Amit Kapila.

src/backend/optimizer/plan/createplan.c

index 0c2d593499d435b464bbaec539b828ec31149fe5..5c06547931b26a15e0e4832adaccdd7e7ac8395e 100644 (file)
@@ -1360,11 +1360,17 @@ create_gather_plan(PlannerInfo *root, GatherPath *best_path)
 {
        Gather     *gather_plan;
        Plan       *subplan;
+       List       *tlist;
 
-       /* Must insist that all children return the same tlist */
+       /*
+        * Although the Gather node can project, we prefer to push down such work
+        * to its child node, so demand an exact tlist from the child.
+        */
        subplan = create_plan_recurse(root, best_path->subpath, CP_EXACT_TLIST);
 
-       gather_plan = make_gather(subplan->targetlist,
+       tlist = build_path_tlist(root, &best_path->path);
+
+       gather_plan = make_gather(tlist,
                                                          NIL,
                                                          best_path->path.parallel_degree,
                                                          best_path->single_copy,