*** a/src/backend/optimizer/plan/planagg.c --- b/src/backend/optimizer/plan/planagg.c *************** *** 314,328 **** find_minmax_aggs_walker(Node *node, List **context) ListCell *l; Assert(aggref->agglevelsup == 0); ! if (list_length(aggref->args) != 1 || aggref->aggorder != NIL) return true; /* it couldn't be MIN/MAX */ ! /* note: we do not care if DISTINCT is mentioned ... */ ! curTarget = (TargetEntry *) linitial(aggref->args); aggsortop = fetch_agg_sort_op(aggref->aggfnoid); if (!OidIsValid(aggsortop)) return true; /* not a MIN/MAX aggregate */ if (contain_mutable_functions((Node *) curTarget->expr)) return true; /* not potentially indexable */ --- 314,333 ---- ListCell *l; Assert(aggref->agglevelsup == 0); ! if (list_length(aggref->args) != 1) return true; /* it couldn't be MIN/MAX */ ! ! /* ! * Ignore ORDER BY and DISTINCT, which are valid but pointless on ! * MIN/MAX. They do not change its result. ! */ aggsortop = fetch_agg_sort_op(aggref->aggfnoid); if (!OidIsValid(aggsortop)) return true; /* not a MIN/MAX aggregate */ + curTarget = (TargetEntry *) linitial(aggref->args); + if (contain_mutable_functions((Node *) curTarget->expr)) return true; /* not potentially indexable */