PostgreSQL 如何以SQL 指令 terminate active session/connection
 · 2 分鐘閱讀
常有需求是要砍掉 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) 中斷連線
 
