跳到主要内容

PostgreSQL 如何以SQL 指令 terminate active session/connection

· 2 分钟阅读
Eric Cheng

常有需求是要砍掉 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) 中断连线
版权声明


這是 google 廣告