diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 211ba65389..2469f43819 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -3133,10 +3133,18 @@ create_agg_path(PlannerInfo *root, pathnode->path.parallel_safe = rel->consider_parallel && subpath->parallel_safe; pathnode->path.parallel_workers = subpath->parallel_workers; + if (aggstrategy == AGG_SORTED) - pathnode->path.pathkeys = subpath->pathkeys; /* preserves order */ + { + if (pathkeys_contained_in(subpath->pathkeys, root->group_pathkeys)) + pathnode->path.pathkeys = list_copy_head(subpath->pathkeys, + root->num_groupby_pathkeys); + else + pathnode->path.pathkeys = subpath->pathkeys; /* preserves order */ + } else pathnode->path.pathkeys = NIL; /* output is unordered */ + pathnode->subpath = subpath; pathnode->aggstrategy = aggstrategy;