如何使用 psql 处理大型结果集?

How to handle large result sets with psql?

我有一个查询提供了大约 1400 万行(我不知道这一点)。当我使用 psql 运行 查询时,我的 Fedora 机器死机了。同样在查询完成后,我不能再使用 Fedora 了,不得不重新启动我的机器。当我将标准输出重定向到一个文件时,Fedora 也冻结了。

那么我应该如何使用 psql 处理大型结果集?

psql 默认在客户端内存中累积完整的结果。这种行为对于所有基于 libpq 的 Postgres 应用程序或驱动程序都是常见的。解决方案是游标 - 然后您只从服务器获取 N 行。 psql 也可以使用光标。您可以通过设置 FETCH_COUNT 变量来更改它,然后它将使用批量检索大小为 FETCH_COUNT.

的游标
postgres=# \set FETCH_COUNT 1000
postgres=# select * from generate_series(1,100000); -- big query