【问题标题】:Locking rows with unique index使用唯一索引锁定行
【发布时间】:2016-12-30 16:16:09
【问题描述】:

我有一个并发工作流,它在 A 列和 B 列上插入具有唯一索引的记录,如果这成功,则在单个内部执行无法回滚的异步操作(API 请求)交易。

所说的 API 请求应该只发生一次,但目前如果该记录被并行插入,它可能会被触发多次。

如果我没记错的话,解决这个问题的方法是在有问题的行上设置一个锁,以确保任何并行惰性将等到初始事务完成。

哪个锁适合这个用例?

【问题讨论】:

    标签: postgresql transactions locking


    【解决方案1】:

    不需要显式锁定。

    如果第二个事务为未提交的其他事务已插入的 PK 插入 相同 值,则第二个事务将等到第一个事务提交或回滚。

    如果第一个事务回滚,则第二个事务将成功。如果第一个事务提交,第二个事务将收到“唯一密钥违规”错误。

    【讨论】:

    • 是的,问题是我在事务内部执行API请求,所以两个事务可以插入行,发送请求,然后其中一个会回滚。 API 请求在事务内部,因为如果 API 请求失败,插入应该回滚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2011-11-01
    相关资源
    最近更新 更多