postgresql - for 循环在 PL/pgSQL 存储过程中如何工作?
问题描述
根据有关cursors的 PostgreSQL 文档,for 循环在cursors
内部使用。
但是,PL/pgSQL 用户通常不需要担心这一点,因为 FOR 循环会在内部自动使用游标来避免内存问题。
所以根据这个,使用 for 循环应该是一个很好的选择来将数据流式传输到客户端。但是,Postgres文档还说明了有关 RETURN NEXT 的以下内容(通常在 for 循环中使用)。
RETURN NEXT 和 RETURN QUERY 的当前实现在从函数返回之前存储整个结果集,如上所述。这意味着如果一个 PL/pgSQL 函数产生一个非常大的结果集,性能可能会很差:数据将被写入磁盘以避免内存耗尽,但函数本身在生成整个结果集之前不会返回。
我的困惑是,如果 Postgres 最终等待从服务器获取整个结果集,那么在 for 循环中使用游标的目的是什么?
解决方案
推荐阅读
- typescript - 在反应 redux 中保存选定的日期而不是 utc 日期
- r - 自动化许多 txt 文件的功能
- r - 将仪表板发布到 RSConnect 后访问项目目录外的文件
- vba - VBA Word - Documents.Open 网站 URL,但间接取自 Word 文档
- spring-boot - 从 spring-boot 1.2.2 迁移到 2.3 时如何修复记录器
- mysql - mysql 按组计算总和 IF
- reactjs - react中常见的条件渲染模式
- java - 替换字符串中的第一个和最后一个符号
- html - 通过 html 链接打开和编辑文本文件
- javascript - 在启用 WAF 的情况下阻止托管在 Amazon ALB 中的 webapp 上的 AJAX Post 请求 - 以防表单数据包含空格字符