From: Tom Lane Date: Wed, 9 Mar 2016 15:56:36 +0000 (-0500) Subject: Fix incorrect tlist generation in create_gather_plan(). X-Git-Tag: REL9_6_BETA1~549 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8776c15c85322612b9bf79daf50f74be71c12e05;p=postgresql Fix incorrect tlist generation in create_gather_plan(). 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. --- diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 0c2d593499..5c06547931 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -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,