SAVEPOINT
Точка сохранения внутри транзакции. Позволяет откатиться к ней, не отменяя всю транзакцию.
SAVEPOINT point_name;
ROLLBACK TO point_name;
RELEASE SAVEPOINT point_name;Объяснение
Пример
BEGIN;
INSERT INTO orders (user_id, total) VALUES (1, 500);
SAVEPOINT after_order;
INSERT INTO payments (order_id, amount) VALUES (currval('orders_id_seq'), 500);
-- Если ошибка в платеже:
ROLLBACK TO after_order;
-- Заказ сохранён, платёж откачен
COMMIT;Связанные термины
Анекдоты по теме
— Что такое UNLOGGED TABLE? — Таблица без WAL (Write-Ahead Log). — Быстрее обычной? — В 5–10 раз на INSERT. — В чём подвох? — При сбое данные теряются. Не реплицируется. — Когда использовать? — Кэш, временные данные, staging для ETL.
— Что такое DDL транзакции? — В PostgreSQL DDL операции (CREATE, ALTER, DROP) транзакционны. — То есть можно откатить DROP TABLE? — Да! BEGIN; DROP TABLE users; ROLLBACK; — таблица цела. — В MySQL? — DDL делает implicit COMMIT. Откатить нельзя. — Это важное отличие.
— Чем TRUNCATE отличается от DELETE? — DELETE логирует каждую строку и может быть в транзакции. — TRUNCATE удаляет всё разом, не логируя строки. Быстрее. — Но TRUNCATE нельзя откатить? — В PostgreSQL можно — TRUNCATE транзакционный. — В MySQL? — Там TRUNCATE автоматически фиксирует транзакцию. Осторожно.