【发布时间】:2017-07-05 18:36:02
【问题描述】:
我有简单的表格“计数器”:
"CounterId" SERIAL (PK)
"CounterName" VARCHAR(50) NOT NULL (UNIQUE INDEX)
"Value" BIGINT NOT NULL
当两个可序列化事务(实际上同时有很多这样的事务)执行查询时:
SELECT NULL
FROM "Counters"
WHERE "CounterName" = @Value FOR UPDATE
SELECT "CounterId", "CounterName", "Value"
FROM "Counters"
WHERE "CounterName" = @Value
LIMIT 2
(此查询由实体框架在同一连接和事务中执行)
UPDATE "Counters" SET "Value" = @Value WHERE "CounterId" = @CounterId
其中一个事务被回滚并出现错误 40001
由于事务之间的读/写依赖关系,无法序列化访问
我正在重试错误事务(5 次),但仍然出现此错误。
这可能是由于第一个和第三个查询中的谓词不同造成的?
【问题讨论】:
标签: sql postgresql