回答:
ドキュメントには2つの設定が記載されています(idle_in_transaction_session_timeout
バージョン9.6xの新機能です)
statement_timeout
(整数)
コマンドがクライアントからサーバーに到着した時点から、指定されたミリ秒を超える時間がかかるステートメントを中止します。log_min_error_statementがERROR以下に設定されている場合、タイムアウトしたステートメントもログに記録されます。値ゼロ(デフォルト)はこれをオフにします。
すべてのセッションに影響するため、postgresql.confでstatement_timeoutを設定することはお勧めしません。
idle_in_transaction_session_timeout
(整数)
指定されたミリ秒単位の期間よりも長い間アイドル状態になっている開いているトランザクションでセッションを終了します。これにより、そのセッションで保持されていたロックを解除し、接続スロットを再利用できます。また、このトランザクションにのみ表示されるタプルをバキュームすることができます。この詳細については、セクション24.1を参照してください。
デフォルト値の0は、この機能を無効にします。
アミューズメントが必要な場合を除き、postgresql.confを設定しないことが重要statement_timeout
です。
これが動作する例です
SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR: canceling statement due to statement timeout
箱から出していない。ただし、設定を無視したカスタムサーバーをコンパイルするのは非常に簡単です。
しかし、より多くの可能性は、接続がアイドル状態の接続を好まないファイアウォールまたはゲートウェイによって切断されることです。
サーバーのログファイルにアクセスできる場合、それは良い手がかりを与えるはずです。クライアントがサーバーが予期せず接続を閉じたと言い、サーバーがクライアントが予期せず接続を閉じたと言った場合、おそらく実際に接続を切断しているのはクライアントとサーバーの間にあるものです。
はい、可能です。設定が必要な接続パラメーターがいくつかあります。
以下のリンクを参照してください。 https://jdbc.postgresql.org/documentation/head/connect.html
loginTimeout connectTimeout socketTimeout cancelSignalTimeout
SHOW statement_timeout;