PgAdmin 4(および実際には、データベースのクライアントとして機能する他のいくつかのプログラム)を使用している場合、サーバーへの接続は、10〜15分間何も操作しないと切断されます。コーヒー1回と電話1回で、「申し訳ありませんが、データベースへの接続が失われました。再接続を試みますか?」のようなメッセージが表示されます。
そして、pgAdminの再接続には常に複数の試行が必要であり、すでに展開されているオブジェクトツリーは折りたたまれます...なので、少し面倒です。
pgAdminには、その動作に関連するパラメータがないようです。 (いくつかの接続タイムアウトを 変更する方法があるようです が、接続に時間がかかりすぎるサーバーに関するpgAdminの動作に関連しています)。
PgAdminがデータベースから切断しないようにするにはどうすればよいですか?
開示:これは実際には「疑似質問」です。 spin-offが別の1つ であり、結局は接続の喪失に関係していません。 ..すでに1つの回答が用意されているという事実を考えると、その回答が誰かに役立つ場合に備えて、私は(あまり謙虚ではありませんが)「質問する」価値があると思います。
pgAdminは10分程度ごとに接続タイムアウトをスローし続けます。
問題はルーター(または、場合によってはステートフルファイアウォール)間 pgAdminクライアントとPostgreSQLサーバー。
これは、自宅(またはオフィス)にいて、ルーターがNAT( Network Address Translation )を実行している場合によく見られます。アイドル時間の後、接続はclosed by the router。これはpgAdminもPostgreSQLも実行するものではなく、ルーターの設定に依存するものです。
この場合、3つのオプションがあります。
routerのconnection_timeout設定を変更します(可能な場合)。適切なドキュメントを持っている。 これはCiscoルーターの例です
接続が十分に長い間アイドル状態になることはないとルーターに信じさせる。それを行うには、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 ;
これは、この役割の設定のみを変更します。
キープアライブに関するリファレンス:これは SSHセッションを存続させる方法についてのビデオ です。これはまったく同じシナリオではありませんが、同等です(pgAdminでSSHを置き換えてください)。