Postgresql死锁的处理
今天遇到一个奇怪的现象,select和delete表时正常执行,但truncate和drop表时会一直运行,也不报错。 查了些资料才发现问题的原因,总结如下: "drop table " 和 "truncate table " 需要申请排它锁 "ACCESS EXCLUSIVE ", 执行这个命令卡住时,说明此时这张表上还有操作正在进行,比如查询等,
1.检索出死锁进程的ID。 SELECT * FROM pg_stat_activity WHERE datname='死锁的数据库ID '; 检索出来的字段中,【wating 】字段,数据为t的那条,就是死锁的进程。找到对应的【procpid 】列的值。 2.将进程杀掉。 SELECT pg_cancel_backend('死锁那条数据的procpid值 '); 结果:运行完后,再次更新这个表,sql顺利执行。
如果pg_stat_activity 没有记录,则查询pg_locks是否有这个对象的锁 select oid,relname from pg_class where relname='table name';
select pg_cancel_backend('进程ID');
另外pg_terminate_backend()函数也可以杀掉进程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |