2012-01-02 46 views
1

sshトンネル接続でSELECTクエリを実行し、大きな(> 550 MBのデータ)結果セットを受け取るときに問題が発生します。 SELECTクエリはローカルで、つまりPostgreSQLサーバが存在するサーバと同じサーバ上で動作します。sshトンネル経由でSELECTクエリの結果セットのサイズ制限 - postgresql

エラーメッセージは、クライアント側では、以下のとおりです。私は、サーバーのログは、より詳細なこれらの多くは登場製サーバ側(postgresql.log)

08006: could not receive data from client: Connection reset by peer 

server closed the connection unexpectedly 
    This probably means the server terminated abnormally 
    before or while processing the request. 
connection to server was lost 

エラーメッセージ私は彼らが手元の問題に無関係であると推測します:

LOG: 08P01: SSL error: unsafe legacy renegotiation disabled 

私はpostgresを見つけませんでした「リモート結果セットの最大サイズ」を制御するためのオプションなどがあります。

エラーが発生する前に使用されていた最大メモリは約519 MBです(VmDataは/ proc/PID/status)。その後、クエリは1分55秒間実行されます。 postgres confファイルにはstatement_timeoutが設定されていません。

私は一度にすべてのデータをメモリに入れなければならないので、カーソルなどはオプションではありません。

のPostgresサーバのバージョン8.3

答えて

2

SSL再ネゴシエーションのように見えるが、あなたの問題の根本です。デフォルトでは、512MBごとに再交渉が行われます。これは、あなたの説明に疑いの余地があります。

特に、一部のolder SSLライブラリでは、プロトコルの(古い)バグに対する保護手段としてSSL再ネゴシエーションができません。

postgresql.confssl_renegotiation_limitを無効にしてみてください。

ssl_renegotiation_limit = 0 

More about that in the manual(バージョン8.3へのリンク)。

+0

実際これがポイントです!しかし、堅牢性を高めるために、リミット/オフセットとデータベース接続のクローズとオープンを使用して、複数の束にデータをロードすることを選択しました。ありがとう! –

+0

@EwaldKeinNachname:複数の接続は厳密には必要ありません。 SSLの再交渉が終わったら、1回のスワップで512 MBはまったく問題ありません。私は間にテーブルへの書き込み操作が手続きを混乱させる可能性があることを認識していると思いますか?あなたが丈夫さを気にしているなら、システム(SSLライブラリ)とあなたのバージョンのPostgreSQLを更新したいかもしれません。どちらもかなり古いです。 –

関連する問題