Aggregates
AGGREGATE declarations with SFUNC, STYPE, INITCOND, FINALFUNC, and ordered-set variants.
Aggregates use two ( ) groups per PostgreSQL’s CREATE AGGREGATE syntax — both are Part 1. The { } block holds grants and comments.
Basic aggregate
SCHEMA public {
AGGREGATE product (DOUBLE PRECISION) (
SFUNC = float8mul,
STYPE = DOUBLE PRECISION,
INITCOND = '1'
)
{
COMMENT 'Multiplicative aggregate over DOUBLE PRECISION values';
GRANTS { EXECUTE TO app_service; }
}
}
-- emits
CREATE OR REPLACE AGGREGATE "public"."product" (DOUBLE PRECISION) (
SFUNC = float8mul,
STYPE = DOUBLE PRECISION,
INITCOND = '1'
);
COMMENT ON AGGREGATE "public"."product" (DOUBLE PRECISION) IS 'Multiplicative aggregate over DOUBLE PRECISION values';
GRANT EXECUTE ON AGGREGATE "public"."product" (DOUBLE PRECISION) TO "app_service";
Ordered-set aggregate
AGGREGATE percentile_disc (DOUBLE PRECISION ORDER BY anyelement) (
SFUNC = ordered_set_transition,
STYPE = internal,
FINALFUNC = percentile_disc_final,
FINALFUNC_EXTRA
)
{
COMMENT 'Ordered-set percentile aggregate';
}
CREATE OR REPLACE AGGREGATE "public"."percentile_disc" (DOUBLE PRECISION ORDER BY anyelement) (
SFUNC = ordered_set_transition,
STYPE = internal,
FINALFUNC = percentile_disc_final,
FINALFUNC_EXTRA
);
COMMENT ON AGGREGATE "public"."percentile_disc" (DOUBLE PRECISION ORDER BY anyelement) IS 'Ordered-set percentile aggregate';
Aggregate with combine and serial functions (parallel-safe)
AGGREGATE sum_parallel (NUMERIC) (
SFUNC = numeric_add,
STYPE = NUMERIC,
INITCOND = '0',
COMBINEFUNC = numeric_add,
SERIALFUNC = numeric_serialize,
DESERIALFUNC = numeric_deserialize,
PARALLEL = SAFE
);
CREATE OR REPLACE AGGREGATE "public"."sum_parallel" (NUMERIC) (
SFUNC = numeric_add,
STYPE = NUMERIC,
INITCOND = '0',
COMBINEFUNC = numeric_add,
SERIALFUNC = numeric_serialize,
DESERIALFUNC = numeric_deserialize,
PARALLEL = SAFE
);
Diffing behaviour
Aggregate identity is (schema, name, input_types). Changes to SFUNC, STYPE, INITCOND, FINALFUNC, COMBINEFUNC, or SERIALFUNC require DROP AGGREGATE IF EXISTS + CREATE AGGREGATE — DESTRUCTIVE.