SQLLab
Глоссарий/Уровень изоляции
ТранзакцииПродвинутый

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

Определяет, насколько транзакция изолирована от изменений других транзакций.

Синтаксис
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- или:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Объяснение

Четыре уровня (от слабого к сильному): READ UNCOMMITTED — видит незакоммиченные данные (грязное чтение). PostgreSQL не поддерживает реально. READ COMMITTED — видит только закоммиченные данные. По умолчанию в PostgreSQL. REPEATABLE READ — одинаковые SELECT дают одинаковый результат в рамках транзакции. SERIALIZABLE — максимальная изоляция, транзакции как будто выполняются последовательно. Чем выше уровень — больше блокировок, ниже производительность.

Пример

-- Для финансовых операций
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  SELECT balance FROM accounts WHERE id = 1;  -- 1000
  -- Другая транзакция НЕ может изменить это значение
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;