Ce article de blog par une société de conseil Postgres mentionne que la nouvelle prise en charge des procédures côté serveur dans Postgres 11 pourrait renvoyer plusieurs jeux de résultats.
➥ Cette fonctionnalité est-elle effectivement apparue dans la version Postgres 11?
Si oui, pouvez-vous expliquer brièvement comment cela fonctionne? Afficher un exemple de code?
Cette fonctionnalité est-elle effectivement apparue dans la version Postgres 11?
Non. Je pense que l'article de blog fait référence au patch "Ensembles de résultats dynamiques issus de procédures" , qui n'a pas été intégré dans la version publiée.
vous pouvez renvoyer plusieurs jeux de résultats à partir d'une procédure - similaire à la façon dont cela a toujours été possible avec une fonction:
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;
Cependant, afficher les résultats est un peu lourd - au moins dans 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>
Cependant, certains clients SQL peuvent afficher automatiquement les résultats.