我目前正在编写一个 plpgsql 函数,该函数将从表中选择并生成大量数据。
我原本打算返回一个数组,但我找到了一个解释“ RETURN NEXT操作的资源 - 对于调用者来说非常方便。
但是,我阅读了有关以下内容的简介:
注意: RETURN NEXT 和 RETURN QUERY 的当前实现在从函数返回之前存储整个结果集,如上所述。这意味着如果 PL/pgSQL 函数产生非常大的结果集,性能可能会很差:
是否有 Postgres 功能允许我的函数在生成结果时将结果流式传输回调用者?这可能是 Postgres 架构的一般限制,但我想确保我没有忽略某些东西!
如果结果不是要在子查询中使用而是通过代码使用,则可以
REFCURSOR
在事务中使用 a。例子:
调用者的用法:
当对零碎检索不感兴趣时,
FETCH ALL FROM cursorname
也可用于将所有结果一次性流式传输给调用者。