Уровень изоляции
Определяет, насколько транзакция изолирована от изменений других транзакций.
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- или:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;Объяснение
Пример
-- Для финансовых операций
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT balance FROM accounts WHERE id = 1; -- 1000
-- Другая транзакция НЕ может изменить это значение
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;Связанные термины
Анекдоты по теме
DBA смотрит на лог: «Deadlock detected». — Кого убили? — Два UPDATE-а. Один держал стул, второй — стол. Никто не уступил. Пришлось убить обоих.
— Что такое «грязное чтение»? — Читаешь данные транзакции, которая ещё не закоммитилась. — А вдруг она сделает ROLLBACK? — Именно. Ты прочитал данные, которых «не было». — PostgreSQL это допускает? — Нет. Минимальный уровень — READ COMMITTED. Грязных чтений не бывает.
— Что такое WAL? — Write-Ahead Log. Журнал изменений. — Зачем? — Перед изменением данных — запись в WAL. При сбое — восстановление из WAL. — Это медленно? — WAL пишется последовательно — это быстро. Сами данные — позже. — Репликация тоже через WAL? — Да. Replica читает WAL с primary.