48

Heroku でアプリを実行しています。このアプリには Postgres 9.2.4 (Dev) アドオンがインストールされています。オンライン データベースにアクセスするには、Navicat Postgres を使用します。Navicat は、Postgres データベースで設定した接続をきれいに閉じないことがあります。その結果、しばらくすると、Postgres データベースへの接続が 20 以上開かれます。私の Postgres インストールでは、20 の同時接続しか許可されていません。そのため、20 以上の接続が開いているため、Postgress データベースに到達できなくなりました (接続が多すぎます)。

私はこれが Navicat の問題であることを知っており、これを解決しようとしています。しかし、それが発生した場合 (接続が多すぎる場合)、どうすればこれを解決できますか (たとえば、すべての接続を閉じます)。

次のすべてのことを試しましたが、結果はありませんでした。

  • Navicat を閉じてコンピュータを再起動しました (OS X 10.9)
  • Heroku アプリケーションを再起動しました ( heroku restart)
  • オンラインデータベースを再起動しようとしましたが、これを行うオプションがないことがわかりました
  • OS X から Postgres サーバーの IP へのすべての接続を手動で閉じました
  • ルーターを再起動しました

Postgres 側にいくつかの「死んだ」接続があることは明らかだと思います。しかし、どうすればそれらを閉じることができますか?

4

6 に答える 6

2

スーパーユーザー (例: "postgres") として、次のようなクエリを使用して、現在のセッション以外のすべてのセッションを強制終了できます。

select pg_cancel_backend(pid)
from pg_stat_activity
where pid <> pg_backend_pid();

それらが消えない場合は、より強力な「キル」を使用する必要があるかもしれませんが、必ずpg_cancel_backend()最初にテストしてください。

select pg_terminate_backend(pid)
from pg_stat_activity
where pid <> pg_backend_pid();
于 2013-11-06T14:34:17.820 に答える