Change Gather not to use a physical tlist.
authorRobert Haas <rhaas@postgresql.org>
Wed, 23 Dec 2015 18:39:42 +0000 (13:39 -0500)
committerRobert Haas <rhaas@postgresql.org>
Wed, 23 Dec 2015 18:41:06 +0000 (13:41 -0500)
This should have been part of the original commit, but was missed.
Pushing data between processes is expensive, so we definitely want
to project away unneeded columns here, just as we do for other nodes
like Sort and Hash that care about the volume of data.

src/backend/optimizer/plan/createplan.c

index 32f903d8dcaa06376358773324d8d0c54fe26606..01209aa3288194a420040f7a750231d4bc86a877 100644 (file)
@@ -558,7 +558,8 @@ use_physical_tlist(PlannerInfo *root, RelOptInfo *rel)
  * If the plan node immediately above a scan would prefer to get only
  * needed Vars and not a physical tlist, it must call this routine to
  * undo the decision made by use_physical_tlist().  Currently, Hash, Sort,
- * and Material nodes want this, so they don't have to store useless columns.
+ * Material, and Gather nodes want this, so they don't have to store or
+ * transfer useless columns.
  */
 static void
 disuse_physical_tlist(PlannerInfo *root, Plan *plan, Path *path)
@@ -1123,6 +1124,8 @@ create_gather_plan(PlannerInfo *root, GatherPath *best_path)
 
        subplan = create_plan_recurse(root, best_path->subpath);
 
+       disuse_physical_tlist(root, subplan, best_path->subpath);
+
        gather_plan = make_gather(subplan->targetlist,
                                                          NIL,
                                                          best_path->num_workers,