diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index e525ba6..e4a107e 100644 *** a/src/backend/optimizer/util/clauses.c --- b/src/backend/optimizer/util/clauses.c *************** count_agg_clauses_walker(Node *node, Agg *** 529,535 **** * pass-by-reference then we have to add the estimated size of the * value itself, plus palloc overhead. */ ! if (!get_typbyval(aggtranstype)) { int32 aggtranstypmod; int32 avgwidth; --- 529,543 ---- * pass-by-reference then we have to add the estimated size of the * value itself, plus palloc overhead. */ ! if (aggref->aggfnoid == ARRAY_AGG_OID) ! { ! /* ! * Since array_agg consumes much more memory than other aggregate ! * functions, we made a special case for it. ! */ ! counts->transitionSpace += ALLOCSET_DEFAULT_INITSIZE; ! } ! else if (!get_typbyval(aggtranstype)) { int32 aggtranstypmod; int32 avgwidth; diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 564917d..0564627 100644 *** a/src/include/catalog/pg_proc.h --- b/src/include/catalog/pg_proc.h *************** DATA(insert OID = 2334 ( array_agg_fina *** 1046,1051 **** --- 1046,1052 ---- DESCR("array_agg final function"); DATA(insert OID = 2335 ( array_agg PGNSP PGUID 12 1 0 0 t f f f f i 1 0 2277 "2283" _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("concatenate aggregate input into an array"); + #define ARRAY_AGG_OID 2335 DATA(insert OID = 760 ( smgrin PGNSP PGUID 12 1 0 0 f f f t f s 1 0 210 "2275" _null_ _null_ _null_ _null_ smgrin _null_ _null_ _null_ )); DESCR("I/O");