Транзакция (TRANSACTION)
Группа SQL операций, выполняемых как единое целое: либо все успешно, либо ни одна.
BEGIN;
-- операции
COMMIT; -- или ROLLBACK;Объяснение
Пример
-- Перевод денег между счетами
BEGIN;
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
COMMIT;
-- Если что-то пошло не так:
-- ROLLBACK;Связанные термины
Анекдоты по теме
— Что такое point-in-time recovery? — Восстановление базы на любой момент времени из бэкапа + WAL архива. — Как? — pg_basebackup создаёт полный снимок. WAL-архив хранит все изменения после. — Можно восстановить на момент «до того как кто-то сделал DELETE»? — Да. Вот почему настраивают WAL archiving.
— Что такое two-phase commit? — Протокол для распределённых транзакций через несколько баз. — Фазы? — 1: все участники готовятся и говорят «готов». — 2: если все готовы — все фиксируют. Иначе — все откатывают. — Надёжно? — Да, но медленно. Один slow participant тормозит всех.
— Почему база данных грустит на свидании? — Потому что она всё время ждёт COMMIT. А он всё не приходит и не приходит. А без COMMIT никаких отношений дальше первого свидания.