SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_get_activity(NULL::integer)
WHERE datid=(SELECT oid from pg_database where datname = 'your_database');
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='current_db';
ALTER DATABASE current_db RENAME TO old_db;
ALTER DATABASE new_db RENAME TO current_db;
像这样的查询应该会有所帮助(假设数据库名为“db”):
pid
曾经被称为procpid
,所以如果您使用的 postgres 版本早于 9.2,您可以尝试以下操作:但是,您必须是超级用户才能断开其他用户的连接。
它也可能对
REVOKE CONNECT ON DATABASE FROM PUBLIC
或类似的东西有用,然后再用GRANT
。这是我对 StackOverflow 上非常相似的问题的回答。
根据您的 postgresql 版本,您可能会遇到一个错误,该错误会
pg_stat_activity
导致忽略掉用户的活动连接。这些连接也没有显示在 pgAdminIII 中。如果您正在进行自动测试(在其中您还创建用户),这可能是一种可能的情况。
在这种情况下,您需要恢复到以下查询:
这可用于从客户端连接中“释放”数据库,例如,您可以重命名它:
请注意,这可能会导致您的客户端应用出现问题。数据实际上不应该因为使用事务而被破坏。