从 Postgres 11 中的服务器端过程返回多个结果集

Bas*_*que 5 postgresql stored-procedures postgresql-11

Postgres 咨询公司的这篇博文提到 Postgres 11 中新的服务器端过程支持将能够返回多个结果集。

? 这个特性确实出现在 Postgres 11 版本中吗?

如果是这样,你能简单解释一下它是如何工作的吗?显示一些代码示例?

a_h*_*ame 6

您可以从过程中返回多个结果集 - 类似于使用函数始终可以实现的方式:

create procedure getdata(result_one inout refcursor, result_two inout refcursor)
as
$$
begin
  open result_one for 
    select * 
    from (values (1,2,3), (4,5,6)) as t(a,b,c);

  open result_two for 
    select * 
    from (values ('one'),('two'),('three'),('four')) as p(name);
end;
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)

但是,显示结果有点麻烦 - 至少在psql

create procedure getdata(result_one inout refcursor, result_two inout refcursor)
as
$$
begin
  open result_one for 
    select * 
    from (values (1,2,3), (4,5,6)) as t(a,b,c);

  open result_two for 
    select * 
    from (values ('one'),('two'),('three'),('four')) as p(name);
end;
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)

不过,某些 SQL 客户端可以自动显示结果。


Dan*_*ité 5

这个特性确实出现在 Postgres 11 版本中吗?

不。我认为博客文章指的是“程序的动态结果集”补丁,它没有进入发布版本。