在 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 操作
- 針對 select 查詢 SQL(對 update、delete 及 DML 不生效)
SELECT pg_cancel_backend(PID);
- 對於修改表的操作,例如 update、insert 等,可以使用 pg_catalogschema 中的函數 pg_terminate_backend 函數完成。會回滾未提交事物
SELECT pg_terminate_backend(PID);
補充:PostgreSQL 無法在 PL / pgSQL 中開始/結束事務