web-dev-qa-db-ja.com

クライアントアプリケーションは、非アクティブ状態が10分間続くと、接続されているデータベースから切断されます。

PgAdmin 4(および実際には、データベースのクライアントとして機能する他のいくつかのプログラム)を使用している場合、サーバーへの接続は、10〜15分間何も操作しないと切断されます。コーヒー1回と電話1回で、「申し訳ありませんが、データベースへの接続が失われました。再接続を試みますか?」のようなメッセージが表示されます。

そして、pgAdminの再接続には常に複数の試行が必要であり、すでに展開されているオブジェクトツリーは折りたたまれます...なので、少し面倒です。

pgAdminには、その動作に関連するパラメータがないようです。 (いくつかの接続タイムアウトを 変更する方法があるようです が、接続に時間がかかりすぎるサーバーに関するpgAdminの動作に関連しています)。

PgAdminがデータベースから切断しないようにするにはどうすればよいですか?


開示:これは実際には「疑似質問」です。 spin-offが別の1つ であり、結局は接続の喪失に関係していません。 ..すでに1つの回答が用意されているという事実を考えると、その回答が誰かに役立つ場合に備えて、私は(あまり謙虚ではありませんが)「質問する」価値があると思います。

4
joanolo

pgAdminは10分程度ごとに接続タイムアウトをスローし続けます。

問題はルーター(または、場合によってはステートフルファイアウォール pgAdminクライアントとPostgreSQLサーバー。

これは、自宅(またはオフィス)にいて、ルーターがNAT( Network Address Translation )を実行している場合によく見られます。アイドル時間の後、接続はclosed by the router。これはpgAdminもPostgreSQLも実行するものではなく、ルーターの設定に依存するものです。

この場合、3つのオプションがあります。

  1. routerconnection_timeout設定を変更します(可能な場合)。適切なドキュメントを持っている。 これはCiscoルーターの例です

  2. 接続が十分に長い間アイドル状態になることはないとルーターに信じさせる。それを行うには、tcp_keep_alivesと呼ばれる1つのserverパラメータを変更します。

接続に関するPostgreSQLのドキュメント によると:

tcp_keepalives_idle(整数)

TCPがクライアントにキープアライブメッセージを送信するまでの秒数を指定します。値0はシステムデフォルトを使用します。このパラメーターは、TCP_KEEPIDLEまたはTCP_KEEPALIVEをサポートするシステムでのみサポートされますシンボル、およびWindows、その他のシステムでは、ゼロでなければなりません。Unixドメインソケットを介して接続されたセッションでは、このパラメーターは無視され、常にゼロとして読み取られます。

キープアライブメッセージする必要があります NAT接続が切断され始めるのを避けます。

ドキュメントの備考に留意してください:

このパラメータはTCP_KEEPIDLEまたはTCP_KEEPALIVEシンボルをサポートするシステムでのみサポートされ、Windowsでサポートされます

どのシステムが「TCP_KEEPIDLEまたはTCP_KEEPALIVEシンボルをサポートするか」は本当にわかりませんが、LinuxとMac すべきはそれらをサポートし、ドキュメントによるとWindowsもそうだと思います。

システムが10分ごとに切断する場合は、この設定を約9 * 60 = 540秒以下にすることをお勧めします。

この設定は、サーバーのpostgresql.confで行う必要があります。次のコマンドを使用して、サーバーに変更を加える前にテストすることもできます。

SET tcp_keepalives_idle = 480 ;

現在の接続の設定を変更する、または

ALTER ROLE (the-one-you-use) tcp_keepalives_idle = 480 ;

これは、この役割の設定のみを変更します。

  1. clientのkeep_alivesを変更します。 connection_timeoutを変更する必要はありません(このパラメーターは、「接続を待機してから相手が応答していないと判断するまでの時間」です。受け入れられた回答の指示に従ってください 接続を維持する任意の方法サーバー上で設定せずにpgAdminで? 完全に説明されています。

キープアライブに関するリファレンス:これは SSHセッションを存続させる方法についてのビデオ です。これはまったく同じシナリオではありませんが、同等です(pgAdminでSSHを置き換えてください)。

4
joanolo