Уровень изоляции
Определяет, насколько транзакция изолирована от изменений других транзакций.
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;
Связанные термины
Анекдоты по теме
— Что такое WAL? — Write-Ahead Log. Журнал изменений. — Зачем? — Перед изменением данных — запись в WAL. При сбое — восстановление из WAL. — Это медленно? — WAL пишется последовательно — это быстро. Сами данные — позже. — Репликация тоже через WAL? — Да. Replica читает WAL с primary.
— Что такое Hot standby feedback? — Механизм, когда replica сообщает primary какие XID ещё нужны. — Зачем? — Предотвращает отмену запросов на реплике из-за VACUUM на primary. — Без этого? — Длинный запрос на реплике прерывается: 'ERROR: canceling statement due to conflict with recovery'. — Включить: hot_standby_feedback = on в postgresql.conf на replica.
MERGE (апдейт + инсерт) говорит таблице: — Я сейчас либо обновлю тебя, либо вставлю, смотря как повезёт. Таблица: — А если ты не попадаешь в условие? MERGE: — Тогда я просто упаду с ошибкой. Но ты же не захочешь меня откатывать? Это же долго.