今天遇到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)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步