ACID
Четыре свойства надёжных транзакций: Atomicity, Consistency, Isolation, Durability.
BEGIN; ... COMMIT; -- ACID гарантируетсяОбъяснение
Пример
-- Пример нарушения без транзакции:
-- Списали деньги с одного счёта, сервер упал — деньги пропали.
-- С транзакцией:
BEGIN;
UPDATE acc SET balance = balance - 500 WHERE id = 1;
UPDATE acc SET balance = balance + 500 WHERE id = 2;
COMMIT; -- оба UPDATE применятся, или ни одинСвязанные термины
Анекдоты по теме
— Что такое two-phase commit? — Протокол для распределённых транзакций через несколько баз. — Фазы? — 1: все участники готовятся и говорят «готов». — 2: если все готовы — все фиксируют. Иначе — все откатывают. — Надёжно? — Да, но медленно. Один slow participant тормозит всех.
— Что такое HOT update в PostgreSQL? — Heap Only Tuple. Если обновлённые колонки не входят в индексы — PostgreSQL обновляет строку без изменения индекса. — Это быстрее? — Значительно. Индекс не трогается.
— Что такое advisory locks? — Пользовательские блокировки вне транзакций. — Пример? — SELECT pg_advisory_lock(12345); — захватить блокировку с ID 12345. — Зачем? — Распределённые mutex: только один воркер обрабатывает задачу с ID 12345. — Как Redis SETNX, но в PostgreSQL. — Именно, без Redis.