diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 914b02ceee..6ef222ad96 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -1578,12 +1578,16 @@ find_hash_columns(AggState *aggstate) aggstate->max_colno_needed = 0; aggstate->all_cols_needed = true; - for (int i = 0; i < scanDesc->natts; i++) + for (int i = scanDesc->natts-1; + i >= 0 && (aggstate->all_cols_needed || aggstate->max_colno_needed == 0); + i--) { - int colno = i + 1; - + int colno = i + 1; if (bms_is_member(colno, aggstate->colnos_needed)) - aggstate->max_colno_needed = colno; + { + if (aggstate->max_colno_needed == 0) + aggstate->max_colno_needed = colno; + } else aggstate->all_cols_needed = false; }