更新返回多条记录的唯一记录

时间:2018-03-03 10:00:38

标签: sql postgresql concurrency subquery

为了避免读 - 修改 - 写周期(https://blog.2ndquadrant.com/postgresql-anti-patterns-read-modify-write-cycles/),我使用支持表(increment),该表增加并返回各种唯一键的唯一值;与日志表结合使用,该日志表使用唯一递增值记录具有特定增量键的条目:

WITH increment_result AS
(UPDATE increment SET value = value + 1 WHERE key = 'my_key' RETURNING value)

INSERT INTO log (text, increment) VALUES ('my_text', (SELECT value FROM increment_result))

在并行且负载较重的环境中,查询会不时失败:

  

PostgresException:21000:用作表达式的子查询返回的多行

我无法理解为什么会发生这种情况,因为increment.key是现有且独特的。但是我怀疑它与并发有关?

为什么会发生这种情况的想法,或者保证唯一增量值的方法?

0 个答案:

没有答案