Postgresql死锁的处理
参考:http://www.52php.cn/article/p-echoodhe-nd.html
今天遇到一个奇怪的现象,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'; selectpg_cancel_backend('进程ID'); 另外pg_terminate_backend()函数也可以杀掉进程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |