Аномалия сериализации на уровне изоляции repeatable read
Дана таблица:
CREATE TABLE archaeologists (
archaeologist_id SERIAL PRIMARY KEY,
full_name VARCHAR,
salary FLOAT,
specialization VARCHAR,
qualification VARCHAR
);
И есть транзакции в двух разных сессиях, которые выполняются параллельно
-- Session 1:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
COMMIT;
-- Session 2:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
COMMIT;
Как можно создать аномалию сериализации, чтобы Postgres её пропустил?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Аномалия сериализации - это когда результат выполнения параллельных транзакций отличается от такового при их последовательном выполнении.
-- session 1 session 2
CREATE TABLE t (x INT, z INT);
INSERT INTO t (z,x) VALUES (1,11),(2,22);
BEGIN;
BEGIN;
SELECT MAX(x) FROM t WHERE z=1;
SELECT MAX(x) FROM t WHERE z=2;
INSERT INTO t(z,x) VALUES (2,222);
INSERT INTO t(z,x) VALUES (1,111);
COMMIT;
COMMIT;
При указанном порядке выполнения первая транзакция выведет 11, вторая 22. Тогда как при последовательном - вторая транзакция выведет 222.
Это - только общая демонстрация идеи. Просто в коммент не помещается.