Return postgres 中使用游标的函数的多个结果集

Return multiple resultset from a function in postgres using cursor

我想在 postgres 中编写一个函数,它将 return 来自不同表的多个结果集。我发现我们可以使用 ref 游标来实现。所以我创建了一个函数应该 return 2 来自不同表的结果。当我在事务下调用游标时,return 没有结果。它只是说查询执行成功。 Postgres 版本 --> 14.X。我在 pgadmin 4 中 运行 这个查询。

CREATE OR REPLACE FUNCTION multipleresultset()
RETURNS SETOF refcursor AS
$BODY$
DECLARE
ref1 refcursor := 'cursor1';
ref2 refcursor := 'cursor2';
BEGIN
open ref1 FOR
SELECT * FROM table1;
RETURN NEXT ref1;

open ref2 FOR
SELECT * FROM table2;
RETURN NEXT ref2;
--RETURN;
END;$BODY$
LANGUAGE 'plpgsql';

begin;
select * from multipleresultset();
FETCH ALL in "cursor1";
FETCH ALL in "cursor2";
commit;

此 SQL 代码本身没问题,但您的 SQL 客户端可能将整个块作为 multi-query 字符串一次性发送。然后 if 仅显示该序列的最后一条指令的结果,即 commit.

的结果

如果您在 psql(postgresql 的主要 command-line 接口)中尝试此操作,它会显示结果,因为 psql 解析 SQL 缓冲区以识别; 之间的查询并将它们作为单独的语句发送(使用 \; 对它们进行分组)。