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

 

 

 

                  

posted @ 2021-02-22 16:21  ''竹先森゜  阅读(2912)  评论(0编辑  收藏  举报