On Sat, Apr 15, 2023 at 11:33:58AM +1200, David Rowley wrote: > On Sat, 15 Apr 2023 at 10:48, Justin Pryzby <pry...@telsasoft.com> wrote: > > > > On Sat, Apr 15, 2023 at 10:04:52AM +1200, David Rowley wrote: > > > Which aggregate function is being called here? Is it a custom > > > aggregate written in C, by any chance? > > > > That function is not an aggregate: > > There's an aggregate somewhere as indicated by this fragment from the > stack trace: > > > #12 project_aggregates (aggstate=aggstate@entry=0x607200070d38) at > > ../src/backend/executor/nodeAgg.c:1377 > > #13 0x0000000000903eb6 in agg_retrieve_direct > > (aggstate=aggstate@entry=0x607200070d38) at > > ../src/backend/executor/nodeAgg.c:2520 > > #14 0x0000000000904074 in ExecAgg (pstate=0x607200070d38) at > > ../src/backend/executor/nodeAgg.c:2172 > > Any chance you could try and come up with a minimal reproducer? You > have access to see which aggregates are being used here and what data > types are being given to them and then what's being done with the > return value of that aggregate that's causing the crash. Maybe you > can still get the crash if you mock up some data to aggregate and > strip out the guts from the plpgsql functions that we're crashing on?
Try this
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;