database 接続数 監視 - postgresqlセッション/接続を終了する



7 Answers

たぶん再起動postgres => sudo service postgresql restart

ユーザ 確認 idle

どのように私はすべての私のpostgresql接続を殺すことができますか?

私はrake db:drop試していrake db:dropが、私は得ます:

ERROR:  database "database_name" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

私はps -ef | grep postgresから見たプロセスをシャットダウンしようとしましたps -ef | grep postgres ps -ef | grep postgresしかしこれはうまくps -ef | grep postgresません:

kill: kill 2358 failed: operation not permitted



OSX、Postgres 9.2(自作でインストール)

$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ pg_ctl restart -D /usr/local/var/postgres
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist


あなたのdatadirが他の場所にある場合は、 ps aux | grep postgres出力を調べることで、どこにあるのかを知ることができますps aux | grep postgres ps aux | grep postgres







私はこの問題を抱えていました。問題はNavicatがローカルのPostgres DBに接続されていることでした。 いったんNavicatを切断すると、問題は消えました。

編集:

また、 絶対的な最後の手段として、データをバックアップしてからこのコマンドを実行することもできます:

sudo kill -15 `ps -u postgres -o pid`

...ポストグルユーザーがアクセスしているすべてのものを削除します。 本番マシンではこれを避けますが、開発環境には問題はないはずです。 この後PostgreSQLを再起動する前に、 すべての postgresプロセスが本当に終了していることを確認することが重要です。

編集2:

このunix.SEの投稿のために私はkill -9からkill -15kill -15するkill -15変更しました。




私はこの方法で解決しました:

私のWindows8 64ビットでは、サービスをrestartするだけです: postgresql-x64-9.5




それを落とす必要はありません。 パブリック・スキーマを削除して再作成するだけです。 ほとんどの場合、まったく同じ効果があります。

namespace :db do

desc 'Clear the database'
task :clear_db => :environment do |t,args|
  ActiveRecord::Base.establish_connection
  ActiveRecord::Base.connection.tables.each do |table|
    next if table == 'schema_migrations'
    ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
  end
end

desc 'Delete all tables (but not the database)'
task :drop_schema => :environment do |t,args|
  ActiveRecord::Base.establish_connection
  ActiveRecord::Base.connection.execute("DROP SCHEMA public CASCADE")
  ActiveRecord::Base.connection.execute("CREATE SCHEMA public")
  ActiveRecord::Base.connection.execute("GRANT ALL ON SCHEMA public TO postgres")
  ActiveRecord::Base.connection.execute("GRANT ALL ON SCHEMA public TO public")
  ActiveRecord::Base.connection.execute("COMMENT ON SCHEMA public IS 'standard public schema'")
end

desc 'Recreate the database and seed'
task :redo_db => :environment do |t,args|
  # Executes the dependencies, but only once
  Rake::Task["db:drop_schema"].invoke
  Rake::Task["db:migrate"].invoke
  Rake::Task["db:migrate:status"].invoke 
  Rake::Task["db:structure:dump"].invoke
  Rake::Task["db:seed"].invoke
end

end



SELECT 
pg_terminate_backend(pid) 
FROM 
pg_stat_activity 
WHERE
pid <> pg_backend_pid()
-- no need to kill connections to other databases
AND datname = current_database();
-- use current_database by opening right query tool



Related