我在执行SELECT查询并通过ssh隧道连接接收大(> 550 MB数据)结果集时遇到麻烦。 SELECT查询在本地工作,即在PostgreSQL服务器所在的同一服务器上工作。
错误消息在客户端:
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost
服务器端的错误消息(postgresql.log)
08006: could not receive data from client: Connection reset by peer
当我使服务器日志更加冗长时,其中很多都出现了,但我想它们与手头的问题无关:
LOG: 08P01: SSL error: unsafe legacy renegotiation disabled
我没有找到任何postgres选项或类似控制“远程结果集最大大小”。
错误发生前使用的最大内存大约为519 MB(来自/ proc / PID / status的VmData),然后查询运行1分55秒。 postgres conf文件中没有设置statement_timeout。
出于目的,我必须一次将所有数据都存储在内存中,因此光标或其他东西不是一个选项。
Postgres服务器版本8.3
答案 0 :(得分:2)
看起来 SSL重新协商是您问题的根源。默认情况下,每512MB重新协商一次 - 这与您的描述非常接近。
特别是,某些older
SSL库无法进行SSL重新协商 - 作为协议中(旧)错误的安全措施。
尝试在ssl_renegotiation_limit
中停用postgresql.conf
。
ssl_renegotiation_limit = 0
More about that in the manual(链接到8.3版)。