postgresql 有条件地防止从其他并发事务插入,直到特定事务完成

mnemlml8  于 2022-12-03  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我目前正在使用Postgres 14,遇到了一个与并发控制相关的问题。
假设我们有两个事务:事务A和事务B。事务A获取多个表的独占锁,事务B必须等待,直到事务A释放锁,才能对锁定的表运行插入查询。事务A完成,事务B成功运行插入查询。
问题是我只想阻止其他事务有条件地插入。
为了简化问题,假设我们只有一个表和两个前面提到的事务
| 标识符|制造厂|
| - -|- -|
| 一个|大众汽车|
| 2个|法拉利|
如果事务A正在运行,我希望阻止事务B(以及所有可能的并发事务)的所有插入,这些事务包含制造商列的Volkswagen值,并允许所有其他插入。
我考虑了一个在插入之前使用触发器的解决方案,其想法是使用某种锁,该锁与所涉及的列的任何类型的标识符以及该列的值相关,我将根据该值有条件地阻止所有运行插入查询的事务,直到正在运行的事务释放了锁。
我阅读了一点关于咨询锁,但我还没有很好地理解他们。

6rvt4ljy

6rvt4ljy1#

您需要一个列出所有制造商的表(每个制造商只列出一次),然后有一个规则,即在任何人可以插入到您显示的表中之前,他们需要锁定制造商表的相应行,就像SELECT 1 from manufacturers WHERE manufacturer='Volkswagen' FOR UPDATE一样

相关问题