Оператор SAVEPOINT
в PostgreSQL позволяет создавать точки сохранения внутри транзакции, к которым можно частично откатываться без завершения всей транзакции. Это полезно для управления сложными операциями, где может потребоваться откат только части внесенных изменений.
Основы оператора SAVEPOINT
Базовый синтаксис:
SAVEPOINT savepoint_name;
Откат к точке сохранения выполняется с помощью ROLLBACK TO
:
ROLLBACK TO savepoint_name;
Удаление точки сохранения без отката:
RELEASE SAVEPOINT savepoint_name;
Использование SAVEPOINT в транзакции
Пример транзакции с точками сохранения:
BEGIN;
INSERT INTO orders (customer, amount) VALUES ('Иван', 100);
SAVEPOINT sp1;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
ROLLBACK TO sp1;
COMMIT;
В этом случае вставка данных в orders
сохранится, а изменение баланса будет отменено.
Вложенные точки сохранения
Можно создавать несколько точек сохранения и откатываться к любой из них:
BEGIN;
SAVEPOINT sp1;
INSERT INTO users (name) VALUES ('Алексей');
SAVEPOINT sp2;
UPDATE users SET name = 'Александр' WHERE name = 'Алексей';
ROLLBACK TO sp1;
COMMIT;
После отката к sp1
запись в users
будет удалена, а все последующие изменения также отменятся.
Удаление точки сохранения
Если точка сохранения больше не нужна, её можно удалить с помощью RELEASE SAVEPOINT
:
RELEASE SAVEPOINT sp1;
После этого sp1
больше не будет доступна для отката.