ТранзакцииПродвинутый
SAVEPOINT
Точка сохранения внутри транзакции. Позволяет откатиться к ней, не отменяя всю транзакцию.
Синтаксис
SAVEPOINT point_name; ROLLBACK TO point_name; RELEASE SAVEPOINT point_name;
Объяснение
SAVEPOINT создаёт промежуточную точку в транзакции. ROLLBACK TO savepoint_name откатывает только изменения после точки. RELEASE SAVEPOINT удаляет точку.
Пример
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;Связанные термины
Анекдоты по теме
— Зачем нужен VACUUM в PostgreSQL? — PostgreSQL не удаляет строки физически сразу. UPDATE создаёт новую версию, DELETE помечает старую как мёртвую. VACUUM убирает мёртвые строки. — Как уборщик? — Точно. И autovacuum делает это автоматически.
Программист написал DELETE без WHERE. Через секунду он уже писал резюме.
Программист: — Я сделал бэкап перед DELETE. DBA: — Молодец. Программист: — А потом забыл, куда сохранил. DBA: — Классика.