首页 > 解决方案 > for 循环在 PL/pgSQL 存储过程中如何工作?

问题描述

根据有关cursors的 PostgreSQL 文档,for 循环在cursors内部使用。

但是,PL/pgSQL 用户通常不需要担心这一点,因为 FOR 循环会在内部自动使用游标来避免内存问题。

所以根据这个,使用 for 循环应该是一个很好的选择来将数据流式传输到客户端。但是,Postgres文档还说明了有关 RETURN NEXT 的以下内容(通常在 for 循环中使用)。

RETURN NEXT 和 RETURN QUERY 的当前实现在从函数返回之前存储整个结果集,如上所述。这意味着如果一个 PL/pgSQL 函数产生一个非常大的结果集,性能可能会很差:数据将被写入磁盘以避免内存耗尽,但函数本身在生成整个结果集之前不会返回。

我的困惑是,如果 Postgres 最终等待从服务器获取整个结果集,那么在 for 循环中使用游标的目的是什么?

标签: postgresqlplpgsqldatabase-cursor

解决方案


推荐阅读