Как работать с несколькими операциями в одной транзакции и при необходимости откатить только часть изменений?

Используйте 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее