CREATE OR REPLACE FUNCTION avfinal(x anycompatiblearray) RETURNS anycompatiblearray LANGUAGE plpgsql AS $$ DECLARE res real[]; BEGIN res := ARRAY_FILL(x[1], ARRAY[4]); RETURN res; END; $$; CREATE OR REPLACE FUNCTION acc(x anycompatiblearray, y anycompatiblearray) RETURNS anycompatiblearray LANGUAGE plpgsql AS $$ BEGIN RETURN ARRAY_FILL(y[1], ARRAY[4]); END; $$; CREATE OR REPLACE AGGREGATE public.av(anycompatiblearray) ( STYPE = anycompatiblearray, INITCOND = '{{0},{0}}', SFUNC = acc, FINALFUNC = avfinal ); CREATE OR REPLACE FUNCTION aw(real[]) RETURNS void LANGUAGE plpgsql AS $function$ begin end $function$; SELECT aw(av(ARRAY[1.0::real])), aw(av(ARRAY[1.0::real])), 1;