web-dev-qa-db-fra.com

Renvoyer plusieurs jeux de résultats à partir de procédures côté serveur dans Postgres 11

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?

3
Basil Bourque

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.

2
Daniel Vérité

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.

2