7

Play 2.0.3 Java アプリケーションからこのエラーが発生しました。Heroku Postgres Dev DB を再起動するにはどうすればよいですか? Heroku ヘルプ センターで DB を再起動する手順が見つかりませんでした。

app[web.1]: Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
4

3 に答える 3

15

表示されたエラー メッセージは、データベースを再起動する理由ではありません。データベースの問題ではありません。アプリケーションが保持している接続が多すぎます。おそらく、接続プールを設定するのを忘れたためです。これは DB サーバーの問題ではなく、DB サーバーを再起動せずに修正できます。

Play アプリケーションを停止するか、接続プールを再構成すると、問題は解決します。

もう 1 つのオプションは、Heroku インスタンスをメンテナンス モードにしてから、再び取り出すことです。

herokuでは (正当な理由により)スーパーユーザーとして接続することは許可されていないため、予約済みのスーパーユーザー スロットを使用して、通常の PostgreSQL のように接続および接続を管理することはできません。

以下も参照してください。

Heroku "psql: FATAL: 残りの接続スロットは非レプリケーション スーパーユーザー接続用に予約されています"

http://wiki.postgresql.org/wiki/Number_Of_Database_Connections

これを見つけたheroku以外のユーザーの場合:

通常の PostgreSQL では、サーバーへの PostgreSQL 接続を使用して、サーバー エンド エンドからクライアントを切断できます。「スーパーユーザー接続」用に予約されたスロットがあることを確認してください。postgresPgAdmin-III または を使用して、スーパーユーザー (デフォルトでは user)として Pg に接続しますpsql

接続すると、次の方法で他のクライアントを表示できます。

SELECT * FROM pg_stat_activity;

自分以外のすべての接続を終了したい場合は、次を実行できます。

SELECT procpid, pg_terminate_backend(procpid) 
FROM pg_stat_activity WHERE procpid <> pg_backend_pid();

AND datname = current_database必要に応じてand/orを追加AND usename = <target-user-name>します。

于 2012-08-14T11:55:49.780 に答える
7

以前の回答に返信してこれを追加するだけでよかったと思いますが、その方法がわからなかったので...

受け入れられた回答のスレッドでのLiron Yahdavのコメントの更新として:「これを見つけた非herokuユーザー」ソリューションは、Heroku PostgreSQL開発データベースで機能しましたが、Lironが提供したクエリをわずかに変更しました。ここに私の変更されたクエリがあります:SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND usename='<your_username>';

procpid が pid に変更されたようです。

于 2013-05-22T16:58:47.717 に答える