すべての postgresql 接続を切断するにはどうすればよいですか?
試してみました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
が、これも機能しません。
kill: kill 2358 failed: operation not permitted
ベストアンサー1
使用できますpg_terminate_backend()接続を切断します。この機能を使用するにはスーパーユーザーである必要があります。これはすべてのオペレーティング システムで同じように動作します。
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
pid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = 'database_name'
;
このクエリを実行する前に、取り消す新しい接続を回避するための CONNECT 権限:
REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;
Postgres 8.4-9.1を使用している場合は、pidの代わりにprocpidを使用してください。
SELECT
pg_terminate_backend(procpid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
procpid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = 'database_name'
;