Postgresql 使用唯一索引锁定行

Postgresql 使用唯一索引锁定行,postgresql,transactions,locking,Postgresql,Transactions,Locking,我有一个并发工作流,它在列a和列B上插入一个具有唯一索引的记录,如果成功,则在单个事务中执行无法回滚的异步操作(API请求) 上述API请求应该只发生一次,但目前,如果该记录被并行插入,则可能会触发多次 如果我没有弄错的话,解决这个问题的方法是在有问题的行上设置一个锁,以确保任何并行惰性体都将等待初始事务完成 对于这个用例,哪个锁是正确的?不需要显式锁 如果第二个事务为PK插入与未提交的其他事务已插入的相同的值,则第二个事务将等待第一个事务提交或回滚 如果第一个事务回滚,则第二个事务将成功。如果

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

上述API请求应该只发生一次,但目前,如果该记录被并行插入,则可能会触发多次

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


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

不需要显式锁

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


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

是的,问题是我在事务中执行API请求,因此两个事务可以插入行,发送请求,然后其中一个将回滚。API请求位于事务内部,因为如果API请求失败,则应回滚插入。