This is not dissimilar to what I am actually doing:
CREATE TABLE foo (id SERIAL PRIMARY KEY, name TEXT);
CREATE OR REPLACE FUNCTION shipit ( VARIADIC things TEXT[] ) RETURNS BOOL LANGUAGE plpgsql AS $$ BEGIN WITH inserted AS ( INSERT INTO foo (name) SELECT * FROM unnest(things) RETURNING id ) PERFORM pg_notify( 'inserted ids', ARRAY(SELECT * FROM inserted)::text ); RETURN FOUND; END; $$;
Only I am using a dummy row variable instead of PERFORM, of course.
pg_notify returns void, so there are no necessary casting to void
so enhanced check - so all returned columns are void should be enough