From 79fde86d6cf74566229fcd3b59b98247688cb30a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Fri, 18 Oct 2019 20:29:47 +0000 Subject: [PATCH] Fix regression in distributing sum aggregation --- .../distributed/planner/multi_logical_optimizer.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index 0e176260e..075104bb8 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -1934,6 +1934,21 @@ MasterAggregateExpression(Aggref *originalAggregate, newMasterAggregate->aggdistinct = NULL; newMasterAggregate->aggfilter = NULL; + if (aggregateType != AGGREGATE_CUSTOM_COMMUTE) + { + /* + * Aggregates like sum may require passing to different signatures. + * eg sum(bigint) returns numeric, so we need to use sum(numeric) on coordinator. + */ + const char *aggregateName = AggregateNames[aggregateType]; + Oid aggregateFunctionId = AggregateFunctionOid(aggregateName, + workerReturnType); + Oid masterReturnType = get_func_rettype(aggregateFunctionId); + + newMasterAggregate->aggfnoid = aggregateFunctionId; + newMasterAggregate->aggtype = masterReturnType; + } + column = makeVar(masterTableId, walkerContext->columnId, workerReturnType, workerReturnTypeMod, workerCollationId, columnLevelsUp); walkerContext->columnId++;