From 04ae11f62e643e07c411c4935ea6af46cb112aa9 Mon Sep 17 00:00:00 2001 From: Robert Haas <rhaas@postgresql.org> Date: Fri, 3 Jun 2016 14:27:33 -0400 Subject: [PATCH] Remove bogus code to apply PathTargets to partial paths. The partial paths that get modified may already have been used as part of a GatherPath which appears in the path list, so modifying them is not a good idea at this stage - especially because this code has no check that the PathTarget is in fact parallel-safe. When partial aggregation is being performed, this is actually harmless because we'll end up replacing the pathtargets here with the correct ones within create_grouping_paths(). But if we've got a query tree containing only scan/join operations then this can result in incorrectly pushing down parallel-restricted target list entries. If those are, for example, references to subqueries, that can crash the server; but it's wrong in any event. Amit Kapila --- src/backend/optimizer/plan/planner.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 75d93c08db2..b1554cb8390 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -1758,19 +1758,6 @@ grouping_planner(PlannerInfo *root, bool inheritance_update, } } - /* - * Likewise for any partial paths, although this case is simpler, since - * we don't track the cheapest path. - */ - foreach(lc, current_rel->partial_pathlist) - { - Path *subpath = (Path *) lfirst(lc); - - Assert(subpath->param_info == NULL); - lfirst(lc) = apply_projection_to_path(root, current_rel, - subpath, scanjoin_target); - } - /* * Save the various upper-rel PathTargets we just computed into * root->upper_targets[]. The core code doesn't use this, but it -- GitLab