Postgresコンサルティング会社によるこの ブログ投稿 は、Postgres 11の新しいサーバー側プロシージャサポートが複数の結果セットを返すことができると述べています。
thisこの機能は実際にPostgres 11リリースに登場しましたか?
もしそうなら、それがどのように機能するかを簡単に説明できますか?コード例を示しますか?
この機能は実際にPostgres 11リリースに登場しましたか?
いいえ。ブログの投稿は "プロシージャからの動的な結果セット" パッチを参照していると思いますが、リリースされたバージョンには含まれていません。
プロシージャから複数の結果セットを返すことができます-関数で常に可能であった方法と同様です:
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;
ただし、結果の表示は少し面倒です-少なくともpsql
では:
postgres@localhost/postgres> \set AUTOCOMMIT off
postgres@localhost/postgres> call getdata(null, null);
result_one | result_two
--------------------+--------------------
<unnamed portal 1> | <unnamed portal 2>
(1 row)
postgres@localhost/postgres> fetch all "<unnamed portal 1>";
a | b | c
---+---+---
1 | 2 | 3
4 | 5 | 6
(2 rows)
postgres@localhost/postgres> fetch all "<unnamed portal 2>";
name
-------
one
two
three
four
(4 rows)
postgres@localhost/postgres>
ただし、一部のSQLクライアントは結果を自動的に表示できます。