解决方法
您可以通过使用DECLARE命令声明服务器端游标来执行此操作:
DECLARE my_cursor CURSOR FOR select * from foo;
然后重复使用FETCH命令读取其结果:
FETCH 10 FROM my_cursor;
通过在FETCH命令之间休眠,您可以有效地限制查询执行的速度.
完成后,您可以通过调用COMMIT,ROLLBACK或CLOSE my_cursor来摆脱光标
请注意,某些类型的查询无法通过游标直接进行流式处理,但会在生成第一行输出之前运行完成.具有散列聚合和大型非索引排序的查询就是一个例子.您可以降低cursor_tuple_fraction设置(默认值为0.1)以阻止规划人员选择这些类型的计划,但并不总是可行.