SELECT查询中结果集的大小限制通过ssh tunnel - postgresql

时间:2012-01-02 16:58:43

标签: postgresql ssl

我在执行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

1 个答案:

答案 0 :(得分:2)

看起来 SSL重新协商是您问题的根源。默认情况下,每512MB重新协商一次 - 这与您的描述非常接近。

特别是,某些older SSL库无法进行SSL重新协商 - 作为协议中(旧)错误的安全措施。

尝试在ssl_renegotiation_limit中停用postgresql.conf

ssl_renegotiation_limit = 0

More about that in the manual(链接到8.3版)。