如何模拟PostgreSQL中的死锁?

如何模拟PostgreSQL中的死锁?,第1张

概述我是PostgreSQL的新手.我想模拟这个时间表的死锁: 如何模拟PostgreSQL中的死锁?有可能吗?如何锁定特定列? 编辑: BEGIN;UPDATE deadlock_demonstrationSET salary1=(SELECT salary1 FROM deadlock_demonstrationWHERE worker_id = 1 FOR UPDATE)+100WH 我是Postgresql的新手.我想模拟这个时间表的死锁:

如何模拟Postgresql中的死锁?有可能吗?如何锁定特定列?
编辑:

BEGIN;UPDATE deadlock_demonstrationSET salary1=(SELECT salary1 FROM deadlock_demonstrationWHERE worker_ID = 1 FOR UPDATE)+100WHERE worker_ID=1;SELECT pg_sleep(5);commit;SELECT salary2 FROM deadlock_demonstration WHERE worker_ID = 1 FOR UPDATE;

在另一个屏幕中,我已经运行了这个

BEGIN;UPDATE deadlock_demonstrationSET salary2=(SELECT salary1 FROM deadlock_demonstrationWHERE worker_ID = 1FOR UPDATE)+200WHERE worker_ID=1;SELECT pg_sleep(5);commit;SELECT salary1 FROM deadlock_demonstration WHERE worker_ID = 1 FOR UPDATE;

为什么没有发生死锁?你能给出一个建议,我应该改变什么来刺激僵局?

>并行打开两个连接,例如psql的两个实例或pgadmin中的两个查询窗口(每个都有自己的会话).
>在每个连接中启动一个事务.开始;
>依次运行相互冲突的命令.
>在您提交之前,其中一个将回滚并出现死锁异常.
>您可能想要回滚另一个. RolLBACK;

显然locking tables很简单:

LOCK tbl;

锁定行可以通过以下方式完成:

SELECT * FROM tbl WHERE boo = 3 FOR UPDATE;

或者分享等Details in the manual here.

您添加的示例无法死锁.两者都试图首先在同一个表的同一行上采用相同的锁.第二个将等待第一个完成.

实际产生死锁的示例(行必须存在或不进行锁定):

Transaction 1                    Transaction 2BEGIN;                                 BEGIN;SELECT salary1 FROM   deadlock_demonstrationWHERE  worker_ID = 1FOR    UPDATE;                                 SELECT salary1                                  FROM   deadlock_demonstration                                 WHERE  worker_ID = 2                                 FOR    UPDATE;UPDATE deadlock_demonstrationSET    salary1 = 100WHERE  worker_ID = 2;                                 UPDATE deadlock_demonstration                                 SET    salary1 = 100                                 WHERE  worker_ID = 1;                     ... deadlock!

结果

验证我的解决方案后,OP user3388473提供了此屏幕截图:

总结

以上是内存溢出为你收集整理的如何模拟PostgreSQL中的死锁?全部内容,希望文章能够帮你解决如何模拟PostgreSQL中的死锁?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1164815.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存