Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit af7d270

Browse files
committed
Fix hypothetical problem passing the wrong GROUP BY pathkeys
1349d27 changed things to make the planner request that the query_pathkeys contain pathkeys for any ORDER BY / DISTINCT aggregates. Some code added prior to that commit in db0d67d made it so the order that the pathkeys appear in the group_pathkeys could be changed so that the GROUP BY could be executed in a more optimal order which minimized sort comparisons. 1349d27 had to make sure that the pathkeys for any ORDER BY / DISTINCT aggregates remained at the end of the groupby_pathkeys and wasn't reordered, so some code was added to add_paths_to_grouping_rel() to first strip off any pathkeys belonging to ORDER BY / DISTINCT aggregates before passing to the function to optimize the order of the group_pathkeys. It seems I dropped the ball in 1349d27 and mistakenly used the untouched PlannerInfo.group_pathkeys to pass to get_useful_group_keys_orderings() instead of the version that had the aggregate pathkeys removed. It was only the code path that was handling creating paths for partially_grouped_rel which made this mistake. In practice, we'll never have any extra pathkeys to strip off when processing partially_grouped_rel as that's only used when considering partial paths, which we never do when there are ORDER BY / DISTINCT aggregates. So this is just a hypothetical bug, not a live bug. We already have the correct pathkeys determined, so it's of no extra cost to pass the correct variable. Reported-by: Justin Pryzby Discussion: https://postgr.es/m/[email protected]
1 parent a340359 commit af7d270

File tree

1 file changed

+0
-3
lines changed

1 file changed

+0
-3
lines changed

src/backend/optimizer/plan/planner.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6637,10 +6637,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
66376637
ListCell *lc2;
66386638
Path *path = (Path *) lfirst(lc);
66396639
Path *path_original = path;
6640-
66416640
List *pathkey_orderings = NIL;
6642-
6643-
List *group_pathkeys = root->group_pathkeys;
66446641
List *group_clauses = parse->groupClause;
66456642

66466643
/* generate alternative group orderings that might be useful */

0 commit comments

Comments
 (0)