在发现命令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')