大型表上的 PostgreSQL 连接重置

Ben*_*ott 3 postgresql

我有一个很大的 PostgreSQL 表 - 280 万行;2345 MB 大小;49 列,主要是短的 VARCHAR 字段,但有一个大的 json 字段。

它在具有 4GB RAM 的 Ubuntu 12.04 VM 上运行。

当我尝试对该表执行 SELECT * 时,我的 psql 连接被终止。查看错误日志,我得到:

2014-03-19 18:50:53 UTC LOG:  could not send data to client: Connection reset by peer
2014-03-19 18:50:53 UTC STATEMENT:  select * from all;
2014-03-19 18:50:53 UTC FATAL:  connection to client lost
2014-03-19 18:50:53 UTC STATEMENT:  select * from all;
Run Code Online (Sandbox Code Playgroud)

为什么会这样?是否有可以传输的最大数据量或其他内容 - 是否可以在 postgres 中配置?

拥有一个大而宽的表是由我们使用的系统决定的(我知道这不是理想的数据库结构)。postgres 可以处理这种大小的表,还是会一直有问题?

感谢您的帮助,本

jja*_*nes 5

服务器日志中的这些消息仅表示客户端意外离开。在这种情况下,它可能会因内存不足错误而死亡。

默认情况下,psql 在显示任何内容之前将整个结果加载到内存中。这样它就可以最好地决定如何格式化数据。您可以通过设置 FETCH_COUNT 来更改该行为