如何终止所有 postgresql 连接?
我正在尝试一个rake db:drop
但我得到:
ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
我尝试关闭从 a 看到的进程ps -ef | grep postgres
但这也不起作用:
kill: kill 2358 failed: operation not permitted
您可以使用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'
;
在执行此查询之前,您必须REVOKECONNECT 权限以避免新连接:
REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;
如果您使用 Postgres 8.4-9.1,请使用 procpid 而不是 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'
;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)