Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: rollback, compensation, transaction

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

Вопрос проверяет умение проектировать отказоустойчивые финансовые и транзакционные механизмы.

Короткий ответ

Rollback проектируется вокруг транзакций и сохранения состояния. Если операция не завершена — используется откат БД. Если изменения уже зафиксированы — применяется компенсационная операция. Ключевое — заранее хранить данные, необходимые для возврата.

Длинный ответ

Определение

Rollback перевода — это восстановление корректного состояния системы после частично или полностью выполненной операции.


Два принципиальных сценария

Перед перечислением важно зафиксировать:
выбор механизма зависит от того, зафиксированы ли изменения в базе.


1) Откат в рамках транзакции

Используется, если ошибка произошла до COMMIT.

  1. Все изменения в одной транзакции

  2. При ошибке — ROLLBACK

  3. Система возвращается в исходное состояние

Подходит для:

  • синхронных операций

  • одного хранилища данных


2) Компенсационная операция

Используется после фиксации данных.

  1. Создаётся обратная операция

  2. Используются сохранённые исходные значения

  3. Меняется статус основной операции

Пример:

def compensate_transfer(transfer):
    restore_balance(transfer.sender, transfer.amount)
    mark_failed(transfer)

Что нужно предусмотреть заранее

  1. Идемпотентность компенсации

  2. Защиту от повторного выполнения

  3. Явные статусы операций

  4. Аудит и логирование


Краткий вывод

Надёжный rollback начинается на этапе проектирования. Без сохранённого контекста и статусов корректный возврат невозможен.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Postgres

    Postgres

Ключевые слова

#rollback

#compensation

#transaction

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.