Оператор 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.