有没有一种方法可以强制让客户端从PostgreSQL断开连接?我正在寻找类似于DB2的 force application all
的等价命令。
我想在我的开发环境中这样做,因为当我打开数据库控制台时,我无法加载数据库转储。我必须先退出它们。
有没有一种方法可以强制让客户端从PostgreSQL断开连接?我正在寻找类似于DB2的 force application all
的等价命令。
我想在我的开发环境中这样做,因为当我打开数据库控制台时,我无法加载数据库转储。我必须先退出它们。
杀死 PostgreSQL 8.4 中的空闲进程:
SELECT procpid, (SELECT pg_terminate_backend(procpid)) as killed from pg_stat_activity
WHERE current_query LIKE '<IDLE>';
将pg_terminate_backend
函数与pg_stat_activity
系统视图相结合。
这个Stack Overflow的回答很好地解释了(引用自araqnid在水平线之间,然后是我):
将数据库“applogs”标记为不接受新连接:
update pg_database set datallowconn = false where datname = 'applogs';
另一个可能的方法是对客户端角色撤销对数据库的“连接”访问权限。
断开用户与数据库的连接=终止后端。因此,要从“applogs”数据库中断开所有其他用户的连接,例如:
select pg_terminate_backend(procpid)
from pg_stat_activity
where datname = 'applogs' and procpid <> pg_backend_pid();
procpid
列已被重命名为pid
。我发布我的答案,因为在我的脚本中无法使用它们,服务器版本为9.3:
psql -U postgres -c "SELECT pid, (SELECT pg_terminate_backend(pid)) as killed from pg_stat_activity WHERE datname = 'my_database_to_alter';"
for x in `ps -eF | grep -E "postgres.*idle"| awk '{print $2}'`;do kill $x; done
SELECT pid, (SELECT pg_terminate_backend(pid)) as killed from pg_stat_activity WHERE state LIKE 'idle';
的意思是查找所有空闲状态的进程,并终止它们的执行。其中,pid代表进程ID,pg_terminate_backend函数用于结束指定pid的进程。 - Mike Weller