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.
{
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,