Как выполнить откат изменений базы данных с помощью Liquibase?

«Как выполнить откат изменений базы данных с помощью Liquibase?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Liquibase предоставляет несколько механизмов для отката (rollback) миграций базы данных.

1. Автоматический откат (для обратимых операций)

Для простых изменений (создание/удаление таблицы) Liquibase может сгенерировать откат автоматически.

<changeSet id="1" author="dev">
    <createTable tableName="company">
        <column name="id" type="int"/>
        <column name="name" type="varchar(50)"/>
    </createTable>
    <!-- Автоматический откат будет: DROP TABLE company -->
</changeSet>

2. Ручное описание отката

Для сложных миграций (например, перенос данных) откат нужно описать явно в теге <rollback>.

<changeSet id="2" author="dev">
    <addColumn tableName="company">
        <column name="address" type="varchar(100)"/>
    </addColumn>
    <rollback>
        <dropColumn tableName="company" columnName="address"/>
    </rollback>
</changeSet>

3. Команды для выполнения отката

  • Откат на N изменений:
    liquibase rollback-count 3
  • Откат до конкретной метки (tag):
    liquibase rollback tag:"v1.0"
  • Откат до определённой даты:
    liquibase rollback-to-date "2024-01-15"

Важно: Стратегия отката должна быть определена заранее. Не все изменения (особенно удаление данных) могут быть безопасно откатаны. Всегда тестируйте откат на staging-окружении.