2016-12-07 3 views
0

rails consoleを使用してすべてのpostgre接続を削除するにはどうすればよいですか?私はこれを取得しています:レールコンソールでpostgre接続をkillする

PG::ConnectionBad 
FATAL: sorry, too many clients already FATAL: sorry, too many clients already 

Rails.root: C:/Users/IBM_ADMIN/Desktop/Work/Extreme Blue Summer Internship/extreme-blue 

Application Trace | Framework Trace | Full Trace 
activerecord (4.2.7.1) lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize' 
activerecord (4.2.7.1) lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `new' 
activerecord (4.2.7.1) lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `connect' 
activerecord (4.2.7.1) lib/active_record/connection_adapters/pos 

事は、私はデータベースをドロップする必要はありませんが、ちょうどそこにすべての接続を殺すためにありますか?どんな助けも親切に評価されます!

tgresql_adapter.rb:242: `PostgreSQLのスーパーユーザとして」

+0

コードのどこに接続していますか?多分接続は永久に開いたままになっていますか? – mokayode

+0

http://stackoverflow.com/questions/2757549/org-postgresql-util-psqlexception-fatal-sorry-too-many-clients-already – mokayode

答えて

0

を初期化するには、セッションを殺すために機能pg_terminate_backendを使用することができます。 pg_stat_activityビューからバックエンドプロセスIDのリストを取得できます。

ので、クエリは次のようになります。

SELECT pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE pid <> pg_backend_pid(); 

はあまり破壊的であるために、あなたはAND state = 'idle'を追加することができます。

アプリケーションがスーパーユーザーとして接続していないことを確認すると、スーパーユーザーが使用できる接続数は常にsuperuser_reserved_connections(デフォルトは3)になります。

あなたのアプリケーションは、実際には最大接続数を超えないようにする必要があります。保証できない場合は、pgBouncerのような接続プールを使用してください。

+0

あなたの答えは@Laurenzです。私はアクティブな接続を可能にするループを書いたことを覚えていないので、レールは自動的に接続を閉じますか? –

0

rails consoleを使用してPostgresプロセスを強制終了することはできません。

(コマンドラインから、またはPostgresAppアプリケーションなどから)起動したにもかかわらず、Postgresを再起動すると、現在の接続がクリアされます。

PostgresがRailsアプリケーション内で提供できる接続数を超えてはいけません。あなたは多くの同時ユーザーの、またはどこかの本当に問題のあるループが必要です。

関連する問題