Теория утверждает, что группа одновременных транзакций сериализуема тогда и только тогда, когда их параллельное выполнение эквивалентно одному из их возможных последовательных выполнений.
Теперь следующее параллельное выполнение транзакций T1 и T2 является сериализуемымпотому что это эквивалентно последовательному выполнению «T1 затем 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, когда эта транзакцияпытается совершить.Почему?