在 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 中开始/结束事务