今天遇到Postgresql的一个问题,部分表记录的update一直无效报错,初步判断为锁表,赶紧进行解决。
1. 查询死锁进程列表
select * from pg_stat_activity where waiting='t'
发现有好几条挂起的记录,记录下所有或需要解锁的pid
2. 解决死锁进程
select pg_cancel_backend('pid值')
解决完后,刷新后测试,恢复正常。
注:如果pg_stat_activity没有记录,可以查询pg_locks这个表中是否有锁定的记录
可以使用pg_cancle_backend()或者pg_terminate_backend()结束锁定的进程。
附查找锁表的方法:
--查询是否锁表了
select oid from pg_class where relname='可能锁表了的表'
select pid from pg_locks where relation='上面查出的oid'
--如果查询到了结果,表示该表被锁 则需要释放锁定
select pg_cancel_backend(上面查到的pid)