Уровень изоляции
Определяет, насколько транзакция изолирована от изменений других транзакций.
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 удалил таблицу. Шеф спрашивает: — Бэкап сделал? — А что это? — Уволю. — Может, ROLLBACK? — А он был BEGIN? — Не помню. — Тогда точно уволю.
Триггер на AFTER INSERT звонит триггеру на BEFORE UPDATE: — Ты не поверишь! Я только что вставил строчку, а она сама себя продублировала через рекурсивный CTE! — Расслабься, это не баг. Это бизнес-логика, которую писал стажёр, уволенный в 2015 году. Просто сделай DISABLE TRIGGER ALL и молись.
— Что такое index bloat? — Индекс «раздувается» со временем из-за мёртвых версий строк. — Как проверить? — pgstattuple расширение: SELECT * FROM pgstatindex('idx_name'); — Как исправить? — REINDEX CONCURRENTLY idx_name; — перестраивает без блокировки. — VACUUM не помогает? — Помогает частично. Тяжёлый bloat — REINDEX.