ROLLBACK в PostgreSQL: откат транзакции

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