Gymterview
middle

Как работает rollback в Liquibase?

Rollback — это механизм отката изменений, внесённых changeset-ами. Liquibase поддерживает автоматический и ручной rollback.

Автоматический rollback

Для многих типов изменений Liquibase генерирует обратные операции автоматически:

Изменение Автоматический rollback
createTable dropTable
addColumn dropColumn
createIndex dropIndex
addForeignKeyConstraint dropForeignKeyConstraint
createView dropView
createSequence dropSequence
renameTable renameTable (обратное)

Ручной rollback

Для операций, которые Liquibase не может откатить автоматически (например, dropTable, sql, insert), необходимо указать rollback вручную:

Пример
<changeSet id="9" author="petrov">
    <dropColumn tableName="users" columnName="middle_name"/>

    <rollback>
        <addColumn tableName="users">
            <column name="middle_name" type="VARCHAR(100)"/>
        </addColumn>
    </rollback>
</changeSet>

Для SQL-формата:

Пример
--changeset petrov:10
ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'ACTIVE';
--rollback ALTER TABLE users DROP COLUMN status;

Команды rollback

Пример
# Откат последних N changeset-ов
liquibase rollbackCount 1

# Откат до определённого тега
liquibase rollback release-1.0

# Откат до определённой даты
liquibase rollbackToDate 2025-01-15T10:00:00

# Генерация SQL для отката (без выполнения)
liquibase rollbackCountSQL 1
liquibase rollbackSQL release-1.0

Рекомендуется всегда явно указывать rollback для changeset-ов, даже если Liquibase может сгенерировать его автоматически — это делает миграции более предсказуемыми.

На собеседовании: важно знать разницу между автоматическим и ручным rollback, а также уметь назвать команды отката. Частая ошибка — не упомянуть, что для деструктивных операций (drop, sql) rollback нужно писать вручную.