Вы получаете все курсоры с
SELECT * FROM asyncmultiplerecs();
Затем вы используете FETCH
для извлечения результатов из курсоров.
Вы забыли назначить имена курсорам, поэтому они будут безымянными.
Вот полный пример того, как это можно сделать:
CREATE FUNCTION asyncmultiplerecs() RETURNS SETOF refcursor
LANGUAGE plpgsql AS
$$DECLARE
ref1 refcursor;
BEGIN
ref1 := 'c1';
OPEN ref1 FOR VALUES (1), (2);
RETURN NEXT ref1;
ref1 := 'c2';
OPEN ref1 FOR VALUES (3), (4);
RETURN NEXT ref1;
END;$$;
Теперь вам нужно вызвать функцию в транзакции, потому что курсоры будут закрыты во время фиксации:
BEGIN;
SELECT * FROM asyncmultiplerecs();
asyncmultiplerecs
-------------------
c1
c2
(2 rows)
FETCH ALL FROM c1;
column1
---------
1
2
(2 rows)
FETCH ALL FROM c2;
column1
---------
3
4
(2 rows)
COMMIT;