常有需求是要砍掉 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) 中斷連線