微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgresql 锁定键/外键上的行

如何解决Postgresql 锁定键/外键上的行

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

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

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

我目前的做法是

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

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

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

提前致谢!

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。