锁定具有唯一索引的行

时间:2016-12-30 16:16:10

标签: postgresql transactions locking

我有一个并发工作流,它在列B和列{{1}}上插入带有唯一索引的记录,如果成功,则执行无法回滚的异步操作(API请求) ,在一次交易中。

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

如果我没有弄错,解决这个问题的方法是设置对违规行的锁定,以确保任何并行的inerts将等到初始事务完成。

哪个锁对于这个用例是正确的?

1 个答案:

答案 0 :(得分:0)

无需显式锁定。

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

如果第一笔交易回滚,第二笔交易将成功。如果第一个事务提交,则第二个事务将出现“唯一键冲突”错误。

相关问题