Создаем таблицу:
=> CREATE TABLE t(n integer);
CREATE TABLE
=> INSERT INTO t VALUES (42);
INSERT 0 1
Запрос из первой транзакции:
=> BEGIN;
BEGIN
=> SELECT * FROM t;
n ---- 42 (1 row)
Удаляем строку во второй транзакции и фиксируем изменения:
=> DELETE FROM t;
DELETE 1
Повторим запрос:
=> SELECT * FROM t;
n --- (0 rows)
Первая транзакция видит произошедшие изменения.
=> COMMIT;
COMMIT
Вернем строку:
=> INSERT INTO t VALUES (42);
INSERT 0 1
Запрос из первой транзакции:
=> BEGIN ISOLATION LEVEL REPEATABLE READ;
BEGIN
=> SELECT * FROM t;
n ---- 42 (1 row)
Удаляем строку во второй транзакции и фиксируем изменения:
=> DELETE FROM t;
DELETE 1
Повторим запрос:
=> SELECT * FROM t;
n ---- 42 (1 row)
На этом уровне изоляции первая транзакция не видит изменений.
=> COMMIT;
COMMIT