From 63918106322328e5a32eb4c11eb1617b89a18981 Mon Sep 17 00:00:00 2001 From: Halil Ozan Akgul Date: Wed, 18 Aug 2021 18:17:54 +0300 Subject: [PATCH] Changes array_cat argument type from anyarray to anycompatiblearray Relevant PG commit: 9e38c2bb5093ceb0c04d6315ccd8975bd17add66 --- .../planner/multi_logical_optimizer.c | 18 +++++++++++++++++- src/backend/distributed/sql/citus--8.0-1.sql | 14 ++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index bd3739717..f88301d08 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -1847,7 +1847,11 @@ MasterAggregateExpression(Aggref *originalAggregate, { /* array_cat_agg() takes anyarray as input */ catAggregateName = ARRAY_CAT_AGGREGATE_NAME; +#if PG_VERSION_NUM >= PG_VERSION_14 + catInputType = ANYCOMPATIBLEARRAYOID; +#else catInputType = ANYARRAYOID; +#endif } else if (aggregateType == AGGREGATE_JSONB_AGG || aggregateType == AGGREGATE_JSONB_OBJECT_AGG) @@ -1882,7 +1886,19 @@ MasterAggregateExpression(Aggref *originalAggregate, newMasterAggregate->args = list_make1(catAggArgument); newMasterAggregate->aggfilter = NULL; newMasterAggregate->aggtranstype = InvalidOid; - newMasterAggregate->aggargtypes = list_make1_oid(ANYARRAYOID); + + if (aggregateType == AGGREGATE_ARRAY_AGG) + { +#if PG_VERSION_NUM >= PG_VERSION_14 + newMasterAggregate->aggargtypes = list_make1_oid(workerReturnType); +#else + newMasterAggregate->aggargtypes = list_make1_oid(ANYARRAYOID); +#endif + } + else + { + newMasterAggregate->aggargtypes = list_make1_oid(ANYARRAYOID); + } newMasterAggregate->aggsplit = AGGSPLIT_SIMPLE; newMasterExpression = (Expr *) newMasterAggregate; diff --git a/src/backend/distributed/sql/citus--8.0-1.sql b/src/backend/distributed/sql/citus--8.0-1.sql index 5647e01fd..e27c773d7 100644 --- a/src/backend/distributed/sql/citus--8.0-1.sql +++ b/src/backend/distributed/sql/citus--8.0-1.sql @@ -320,9 +320,23 @@ CREATE TRIGGER dist_shard_cache_invalidate -- Citus aggregates + +DO $proc$ +BEGIN +IF substring(current_Setting('server_version'), '\d+')::int >= 14 THEN + EXECUTE $$ +CREATE AGGREGATE array_cat_agg(anycompatiblearray) (SFUNC = array_cat, STYPE = anycompatiblearray); +COMMENT ON AGGREGATE array_cat_agg(anycompatiblearray) + IS 'concatenate input arrays into a single array'; + $$; +ELSE + EXECUTE $$ CREATE AGGREGATE array_cat_agg(anyarray) (SFUNC = array_cat, STYPE = anyarray); COMMENT ON AGGREGATE array_cat_agg(anyarray) IS 'concatenate input arrays into a single array'; + $$; +END IF; +END$proc$; GRANT SELECT ON pg_catalog.pg_dist_partition TO public; GRANT SELECT ON pg_catalog.pg_dist_shard TO public;