-- replace the batch variants DROP FUNCTION pgmq.archive(text, bigint[]); DROP FUNCTION pgmq.delete(text, bigint[]); CREATE FUNCTION pgmq.delete( queue_name TEXT, msg_ids BIGINT[] ) RETURNS SETOF BIGINT AS $$ DECLARE sql TEXT; BEGIN sql := FORMAT( $QUERY$ DELETE FROM pgmq.q_%s WHERE msg_id = ANY($1) RETURNING msg_id $QUERY$, queue_name ); RETURN QUERY EXECUTE sql USING msg_ids; END; $$ LANGUAGE plpgsql; CREATE FUNCTION pgmq.archive( queue_name TEXT, msg_ids BIGINT[] ) RETURNS SETOF BIGINT AS $$ DECLARE sql TEXT; BEGIN sql := FORMAT( $QUERY$ WITH archived AS ( DELETE FROM pgmq.q_%s WHERE msg_id = ANY($1) RETURNING msg_id, vt, read_ct, enqueued_at, message ) INSERT INTO pgmq.a_%s (msg_id, vt, read_ct, enqueued_at, message) SELECT msg_id, vt, read_ct, enqueued_at, message FROM archived RETURNING msg_id; $QUERY$, queue_name, queue_name ); RETURN QUERY EXECUTE sql USING msg_ids; END; $$ LANGUAGE plpgsql;