PostgreSQL 杀线程

在发现命令hung住时,可以尝试查询当前数据库的lock

SELECT * FROM pg_stat_activity WHERE datname='database_name';
或者
SELECT * FROM pg_stat_activity WHERE datname='database_name' and state='lock';

然后根据上面的信息,杀掉造成阻塞的线程

select pg_terminate_backend(pid);
1)需要superuser权限,可以关闭所有的后台进程;
2)向后台发送SIGTERM信号,关闭事务、关闭Process。

或者

select pg_cancel_backend(pid);
1)只能关闭自己用户下的后台进程;
2)向后台发送SIGINT信号,用于关闭事务;

或者比较干脆,生产环境用时要仔细仔细再仔细的命令

select * from pg_catalog.pg_stat_activity
where pid in(select pid 
from pg_catalog.pg_locks pl 
where relation::regclass::varchar ='table_schema.table_name')

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注