pgsql: Allow parallel aggregate on string_agg and array_agg - Mailing list pgsql-committers

From David Rowley
Subject pgsql: Allow parallel aggregate on string_agg and array_agg
Date
Msg-id E1pJoYV-0050rd-SN@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Allow parallel aggregate on string_agg and array_agg

This adds combine, serial and deserial functions for the array_agg() and
string_agg() aggregate functions, thus allowing these aggregates to
partake in partial aggregations.  This allows both parallel aggregation to
take place when these aggregates are present and also allows additional
partition-wise aggregation plan shapes to include plans that require
additional aggregation once the partially aggregated results from the
partitions have been combined.

Author: David Rowley
Reviewed-by: Andres Freund, Tomas Vondra, Stephen Frost, Tom Lane
Discussion: https://postgr.es/m/CAKJS1f9sx_6GTcvd6TMuZnNtCh0VhBzhX6FZqw17TgVFH-ga_A@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/16fd03e956540d1b47b743f6a84f37c54ac93dd4

Modified Files
--------------
doc/src/sgml/func.sgml                   |   6 +-
src/backend/optimizer/prep/prepagg.c     |  28 +-
src/backend/parser/parse_agg.c           |  37 +-
src/backend/utils/adt/array_userfuncs.c  | 624 +++++++++++++++++++++++++++++++
src/backend/utils/adt/arrayfuncs.c       |  20 +-
src/backend/utils/adt/varlena.c          | 207 +++++++++-
src/include/catalog/catversion.h         |   2 +-
src/include/catalog/pg_aggregate.dat     |  13 +-
src/include/catalog/pg_proc.dat          |  27 ++
src/include/parser/parse_agg.h           |   2 +
src/include/utils/array.h                |   3 +
src/test/regress/expected/aggregates.out |  98 +++++
src/test/regress/sql/aggregates.sql      |  62 +++
13 files changed, 1101 insertions(+), 28 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Track logrep apply workers' last start times to avoid useless wa
Next
From: Michael Paquier
Date:
Subject: pgsql: pg_walinspect: Add pg_get_wal_fpi_info()