Используйте SAVEPOINT внутри транзакции и ROLLBACK TO SAVEPOINT для отката только последующих изменений. Общая транзакция при этом остаётся открытой.
Как работать с несколькими операциями в одной транзакции и при необходимости откатить только часть изменений?
Используйте SAVEPOINT внутри транзакции и ROLLBACK TO SAVEPOINT для отката только последующих изменений. Общая транзакция при этом остаётся открытой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте SAVEPOINT внутри транзакции и ROLLBACK TO SAVEPOINT для отката только последующих изменений. Общая транзакция при этом остаётся открытой.
BEGIN;
-- Основные изменения.
SAVEPOINT optional_step;
-- Дополнительные изменения.
ROLLBACK TO SAVEPOINT optional_step;
-- Продолжение основной операции.
COMMIT;
Если дополнительный шаг завершился ошибкой, клиент должен обработать её и отправить rollback к точке сохранения. RELEASE SAVEPOINT удаляет точку, но не фиксирует всю транзакцию. Это не независимая вложенная транзакция: окончательный rollback внешней операции отменит и её изменения. Внешние HTTP-вызовы и другие нетранзакционные эффекты таким способом не откатываются.
Источник: www.postgresql.org.