我在PostgreSQL 9.2中有一个ON INSERT
触发器,它会进行一些计算并在插入的每一行中注入额外的数据。问题是我不希望任何两个INSERT
事务并行发生。我希望他们一个接一个地去,因为我的计算必须是增量的,并考虑到以前的计算结果。是否有可能以某种方式实现这一目标?
我正在尝试在付款清单上创建滚动余额:
id | amount | balance
----------------------
1 | 50 | 50
2 | 130 | 180
3 | -75 | 105
4 | 15 | 120
balance
必须按每个INSERT
计算,作为之前的余额加上新的付款amount
。如果INSERT
并行发生,我在balance
列中有重复项,这是合乎逻辑的。我需要找到一种方法来强制执行它们以严格的顺序执行。
答案 0 :(得分:1)
SERIALIZABLE
交易没有帮助,主要是因为here解释了问题。我只是在大多数交易中遇到错误:could not serialize access due to read/write dependencies among transactions
。
在每个LOCK
:
INSERT
LOCK TABLE receipt IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO receipt ...
现在正在进行所有插入。