No momento, estou escrevendo uma função plpgsql que selecionará em uma tabela e produzirá uma quantidade substancial de dados.
Originalmente, eu retornaria uma matriz, mas encontrei um recurso que explica a operação " RETURN NEXT - Muito útil para chamadores.
No entanto, li esta sinopse que é preocupante:
Nota: A implementação atual de RETURN NEXT e RETURN QUERY armazena todo o conjunto de resultados antes de retornar da função, conforme discutido acima. Isso significa que, se uma função PL/pgSQL produzir um conjunto de resultados muito grande, o desempenho poderá ser ruim:
Existe um recurso do Postgres que permita que minha função transmita os resultados de volta para o chamador à medida que são produzidos? Isso pode ser uma limitação da arquitetura do Postgres em geral, mas quero ter certeza de que não estou esquecendo nada!
Se os resultados não devem ser usados em uma subconsulta, mas por código, você pode usar a
REFCURSOR
em uma transação.Exemplo:
Uso para o chamador:
Quando não estiver interessado na recuperação fragmentada,
FETCH ALL FROM cursorname
também pode ser usado para transmitir todos os resultados para o chamador em uma única etapa.