我该怎么做? />
#1 楼
这是我对StackOverflow上非常类似的问题的回答。取决于您的postgresql版本,您可能会遇到一个错误,这会使
pg_stat_activity
忽略掉线用户的活动连接。这些连接也未在pgAdminIII内部显示。 如果您正在执行自动测试(您还将在其中创建用户),则可能是这种情况。
在这种情况下,您需要还原为以下查询:
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');
评论
错误:表“ pg_stat_activity”(psql(9.6.1))缺少FROM子句条目
–user1767316
17年7月19日在14:51
这不再起作用....得到上述错误^
–轻巧
17年12月6日在18:25
这对我有用,@ Szymon Guz的解决方案现在应该是公认的答案:从pg_stat_activity中选择pg_terminate_backend(pid),其中datname ='DB_NAME';
–克里斯
20-4-26下午14:53
#2 楼
这样的查询应该有帮助(假设数据库名为“ db”):select pg_terminate_backend(pid) from pg_stat_activity where datname='db';
pid
以前称为procpid
,因此,如果您使用的是低于9.2的postgres您可以尝试以下操作:select pg_terminate_backend(procpid) from pg_stat_activity where datname='db';
但是您必须是超级用户才能断开其他用户的连接。
它也可能对
REVOKE CONNECT ON DATABASE FROM PUBLIC
或类似的东西很有用,然后在随后对它进行GRANT
。#3 楼
这可以用来从客户端连接中“释放”数据库,以便例如您可以重命名它: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;
请注意,这可能会导致您的行为出现问题。客户端应用。实际上,不应因使用事务而破坏数据。
评论
我读过某个地方,您可以使用lowth.com/cutter实现这一目标。