跳至主要内容

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

· 閱讀時間約 1 分鐘
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) 中斷連線