【问题标题】:Postgresql Locking Rows on a Key/Foreign KeyPostgresql 在键/外键上锁定行
【发布时间】:2021-04-17 21:49:43
【问题描述】:

我正在使用 postgresql。我有 3 张桌子。

  • 表 A 有一个作为主键的 ID 列
  • 表 B表 C 的 ID 列是对 A 的 ID 的外键引用。

在单个进程中,我想锁定任何具有特定 ID 的行,然后可能删除行并在 B 和 C 中插入具有该 ID 的行

我目前的做法是

  1. 在 ID 上的 A 上选择 FOR UPDATE。
  2. 然后我尝试在 B 和 C 中删除和插入行。
  3. 提交/结束

不幸的是,我的代码在尝试插入时出现死锁。

我做错了什么?防止其他进程在 B 和 C 中添加、删除或更新具有给定 ID 的行的正确方法是什么(直到我完成我的事务)?

提前致谢!

【问题讨论】:

    标签: sql postgresql foreign-keys dml


    【解决方案1】:

    看起来我从一开始就做对了。我的问题是我不小心在我的代码中创建了两个不同的数据库连接。所以,从 postgresql 的角度来看,有两个不同的事务——因此是死锁。

    【讨论】:

    • 啊...您的方法是正确的。就是这样做的。
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多