Уровень изоляции Read Committed

Создаем таблицу:

=> 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

Уровень изоляции Repeatable Read

Вернем строку:

=> 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