【发布时间】:2018-11-21 06:11:50
【问题描述】:
理论表明,一组并发事务是可序列化的,当且仅当它们的并发执行等同于它们可能的串行执行之一。
现在事务T1和T2的以下并发执行是可序列化的,因为它相当于串行执行“T1 then T2”
T1: r1x w1y c1
T2: w2x c2
(i.e., T1 reads x, T2 writes x, T1 writes y, T2 commits, and finally, T1 commits)
但是,在 PostgreSQL 10.4 中尝试时,如下所示:
T1: begin
T1: set transaction isolation level serializable;
T2: begin
T2: set transaction isolation level serializable;
T2: update variables set value = value + 1 where name = 'x'
T1: update variables set value = value + 1 where name = 'y'
T2: commit
T1: commit
当此事务尝试提交时,数据库中止 T1。为什么?
【问题讨论】:
标签: postgresql concurrency transactions serializable