我有一个很大的 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 可以处理这种大小的表,还是会一直有问题?
感谢您的帮助,本
服务器日志中的这些消息仅表示客户端意外离开。在这种情况下,它可能会因内存不足错误而死亡。
默认情况下,psql 在显示任何内容之前将整个结果加载到内存中。这样它就可以最好地决定如何格式化数据。您可以通过设置 FETCH_COUNT 来更改该行为