我有一个查询,它提供了大约14M行(我没有意识到这一点)。当我使用psql运行查询时,我的Fedora机器冻结了。在查询完成后,我再也无法使用Fedora并且不得不重启我的机器。当我将标准输出重定向到文件时,Fedora也冻结了。
那么我应该如何使用psql处理大型结果集?
答案 0 :(得分:4)
psql
会在客户端内存中累积完整的结果。对于所有基于libpq
的Postgres应用程序或驱动程序,此行为通常都适用。解决方案是游标 - 然后您只从服务器获取N行。 psql
也可以使用游标。您可以通过设置FETCH_COUNT
变量来更改它,然后它将使用批量检索大小为FETCH_COUNT
的游标。
postgres=# \set FETCH_COUNT 1000 postgres=# select * from generate_series(1,100000); -- big query