END; COMMIT
9.3 Уровень изоляции REPEATABLE READ Третий уровень изоляции — REPEATABLE READ. Само его название говорит о том,
что он не допускает наличия феномена неповторяющегося чтения данных. А в
PostgreSQL на этом уровне не допускается и чтение фантомных строк.
Приложения, использующие этот уровень изоляции должны быть готовы к тому, что
придется выполнять транзакции повторно. Это объясняется тем, что транзакция, ис-
пользующая этот уровень изоляции, создает снимок данных не перед выполнением
каждого запроса, а только однократно, перед выполнением
первого запроса транзак-
ции. Поэтому транзакции с этим уровнем изоляции не могут изменять строки, ко-
торые были изменены другими завершившимися транзакциями уже после создания
снимка. Вследствие этого PostgreSQL не позволит зафиксировать транзакцию, кото-
рая попытается изменить уже измененную строку.
Важно помнить, что повторный запуск может потребоваться только для транзакций,
которые вносят изменения в данные. Для транзакций, которые только читают дан-
ные, повторный запуск никогда не требуется.
На первом терминале:
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN
Сначала посмотрим содержимое таблицы:
SELECT * FROM aircrafts_tmp; Обратите внимание, что после уже проведенных экспериментов в таблице осталось
меньше строк, чем было вначале.
aircraft_code |
model
| range
---------------+---------------------+-------
320
| Airbus A320-200
| 5700
321
| Airbus A321-200
| 5600
319
| Airbus A319-100
| 6700
SU9
| Sukhoi SuperJet-100 | 3700
CN1
| Cessna 208 Caravan | 2100
CR2
| Bombardier CRJ-200 | 1900
(6 строк)
207