SQLLab
ТранзакцииПродвинутый

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;