Оператор ROLLBACK
в PostgreSQL используется для отмены всех изменений, выполненных в рамках текущей транзакции. Это позволяет откатить некорректные или нежелательные изменения, если они еще не были зафиксированы с помощью COMMIT
.
Основы оператора ROLLBACK
Базовый синтаксис:
ROLLBACK;
Использование ROLLBACK в транзакции
Пример транзакции с откатом изменений:
BEGIN;
UPDATE users SET email = 'new_email@example.com' WHERE id = 1;
ROLLBACK;
После выполнения ROLLBACK
все изменения, сделанные в транзакции, будут отменены.
Использование SAVEPOINT и ROLLBACK TO
Оператор SAVEPOINT
позволяет создавать точки сохранения внутри транзакции, к которым можно откатиться частично с помощью ROLLBACK TO
:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SAVEPOINT sp1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
ROLLBACK TO sp1;
COMMIT;
После выполнения ROLLBACK TO sp1
отменяется только изменение баланса для второго аккаунта, а остальная часть транзакции остается активной.
Откат транзакции с исключениями
При возникновении ошибки в транзакции PostgreSQL не позволяет выполнить COMMIT
, требуя отката:
BEGIN;
INSERT INTO users (id, name) VALUES (1, 'Иван');
INSERT INTO users (id, name) VALUES (1, 'Петр'); -- Ошибка (дублирующийся id)
ROLLBACK;
Все изменения в транзакции отменяются после выполнения ROLLBACK
.