常有需求是要砍掉 QA 环境的 database 资料,然后把 PROD 的资料倒到 QA,在 drop database 时有时会看到尚有连线无法删除..etc 的资讯,整理一下笔记要如何处理这样的情形
PostgreSQL 中断连线 SQL 指令
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
pid <> pg_backend_pid()
AND datname = 'havocfuture' -- 换成你的 database 名称
在 postgreSQL 12 测试可用
指令简单说明
- 乍看之下好像只是个 select 指令,实际上执行后就可以中断连线
- SQL 中有两个 function
- pg_terminate_backend(pid) ⇒ 中断 pid 的连线
- pg_backend_pid() ⇒ 正在 query 的 pid
- 从 pg_stat_activity 查询要中断的 pid,条件为 pid 不等于 pg_backend_pid() 及指定 database name
- 查到 pid 后,使用 pg_terminate_backend(pid) 中断连线