PostgreSQL中終止正在執行的SQL語句


  在 Linux 系統中,可以使用 kill 方式強制殺掉進程,但對於修改數據表的語句來說,這樣可能導致 PostgreSQL 進入recovery mode,會導致鎖表。從安全角度考慮,可以在 PostgreSQL 層面進行 kill。

  PostgreSQL 的運行情況可以 pg_stat_activity 查看,這是一個位於 pg_catalog schema中的視圖。具體 pg_stat_activity 的知識點可以查看這篇文章:https://www.cnblogs.com/zhuminghui/p/14421501.html

查看哪些SQL語句正在執行,語句如下:

SELECT 
  datname,procpid,query_start, current_query,waiting,client_addr 
FROM pg_stat_activity WHERE waiting='t';

 

kill 操作

  1. 針對 select 查詢 SQL(對 update、delete 及 DML 不生效)
    SELECT pg_cancel_backend(PID);

     

  2. 對於修改表的操作,例如 update、insert 等,可以使用 pg_catalogschema 中的函數 pg_terminate_backend 函數完成。會回滾未提交事物
    SELECT pg_terminate_backend(PID);

     

補充:PostgreSQL 無法在 PL / pgSQL 中開始/結束事務

 

 

 

                  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM