如何终止我所有的 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
最佳答案
您可以使用 pg_terminate_backend()杀死一个连接。您必须是 super 用户才能使用此功能。这在所有操作系统上都一样。
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'
;
在执行此查询之前,您必须 REVOKE避免新连接的 CONNECT 权限:
REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;
If you're using Postgres 8.4-9.1 use procpid instead of pid
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'
;
关于database - 杀死一个 postgresql session /连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108876/