pgsql 解决死锁的步骤

.当一个表可以查询,不可以更新和插入 ,很有可能锁表了

检测死锁

 --查询指定表的oid
select oid from pg_class where relname='t_mytab'; -- t_mytab为你觉得可能死锁的表名


-- 根据oid查询该表正在被执行的进程 pid
select pid from pg_locks where relation='358009'; -- 358009为上述查询到表t_mytab的oid

2.解除死锁

--如果上面检测查询到了pid结果,则说明该表可能被锁,需要执行释放锁定指令。
select pg_cancel_backend('8954'); -- 8954为pid

3.批量解除

若查询到的Pid记录很多,则你可能需要批量执行。以下语句可以生产批量语句,复制出来执行执行即可。

-- 以下358009为步骤1中查询到的死锁表的oid

select 'select pg_cancel_backend( '''|| pid ||''');' pid from pg_locks where relation='358009'

select pg_terminate_backend(pid);

你可能感兴趣的:(数据库)