1

ON INSERT在 PostgreSQL 9.2 中有一个触发器,它会进行一些计算并将额外的数据注入到插入的每一行中。问题是我不希望任何两个INSERT事务并行发生。我希望他们一一进行,因为我的计算必须是增量的,并考虑到以前的计算结果。有可能以某种方式实现这一目标吗?

我正在尝试在付款清单上创建滚动余额:

id | amount | balance
----------------------
 1 |     50 |      50
 2 |    130 |     180
 3 |    -75 |     105
 4 |     15 |     120

balance必须计算每个以前的INSERT余额加上新的付款amount。如果INSERTs 并行发生,我在balance列中有重复项,这是合乎逻辑的。我需要找到一种方法来强制它们以严格的顺序执行。

4

1 回答 1

1

SERIALIZABLE交易没有帮助,主要是因为这里解释的问题。我只是在大多数交易中遇到错误:could not serialize access due to read/write dependencies among transactions.

有什么帮助是LOCK在 every 之前明确的INSERT

LOCK TABLE receipt IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO receipt ...

因此,所有插入现在都在发生。

于 2013-09-20T19:15:27.823 回答