Введение в Liquibase Rollback

Введение в Liquibase Rollback

1. обзор

В нашемprevious article мы показали Liquibase как инструмент для управления схемами и данными базы данных.

В этой статье мы подробнее рассмотрим функцию отката и то, как отменить операцию Liquibase.

Естественно, это критическая особенность любой производственной системы.

2. Категории миграций ликибазы

Существует две категории операций Liquibase, что приводит к другому генерации оператора отката:

  • automatic, где миграция может детерминированно генерировать шаги, необходимые для отката

  • manual, где нам нужно выполнить команду отката, потому что инструкция миграции не может использоваться для детерминированной идентификации оператора

Например,the rollback of a “create table” statement would be to “drop” the created table. Это может быть определено без сомнения, и, следовательно, оператор отката может быть сгенерирован автоматически.

С другой стороны,the rollback statement for a “drop table” command is not possible to be determined. Невозможно определить последнее состояние таблицы, поэтому оператор отката не может быть создан автоматически. These types of migration statements require a manual rollback instructions.

3. Написание простого оператора отката

Давайте напишем простую ревизию, которая при выполнении создаст таблицу и добавит в ревизию инструкцию отката:


    
        
        
        
    
    
        
    

Приведенный выше пример относится к первой категории, упомянутой выше. Он автоматически создаст оператор отката, если мы его не добавим. Но мы можем переопределить поведение по умолчанию, создав наш оператор отката.

Мы можем запустить миграцию с помощью команды:

mvn liquibase:update

После выполнения мы можем откатить действие, используя:

mvn liquibase:rollback

Это выполняет сегмент отката набора изменений и должен вернуть задание, выполненное на этапе обновления. Но если мы выполним эту команду в одиночку, сборка не удастся.

Причина этого в том, что мы не указываем лимит отката; база данных будет полностью уничтожена путем отката к начальной стадии. Поэтому обязательно определить одно из трех ограничений ниже, чтобы ограничить операцию отката при выполнении условия:

  • rollbackTag

  • rollbackCount

  • rollbackDate

3.1. Откат к тегу

Мы можем определить конкретное состояние нашей базы данных как тег. Поэтому мы можем вернуться к этому состоянию. Откат к имени тега «1.0» выглядит следующим образом:

mvn liquibase:rollback -Dliquibase.rollbackTag=1.0

При этом выполняются операторы отката всех наборов изменений, выполненных после тега «1.0».

3.2. Откат по графу

Здесь мы определяем, сколько наборов изменений нам нужно откатить. Если мы определим его как единицу, последний выполненный набор изменений будет откатан:

mvn liquibase:rollback -Dliquibase.rollbackCount=1

3.3. Откат к дате

Мы можем установить цель отката как дату, поэтому любой набор изменений, выполненный после этого дня, будет откатан:

mvn liquibase:rollback "-Dliquibase.rollbackDate=Jun 03, 2017"

Формат даты должен быть форматом данных ISO или соответствовать значениюDateFormat.getDateInstance() исполняющей платформы.

4. Откатить параметры набора изменений

Давайте исследуем возможные варианты использования оператора отката в наборах изменений.

4.1. Откат для нескольких состояний

Один тег отката может содержать более одной команды, которая должна быть выполнена:


    
        
        
    
    
        
        
    
    
        
        
    

Здесь мы отбрасываем две таблицы в одном теге отката. Мы также можем разделить задачу на несколько операторов.

4.2. Несколько тегов отката

В наборе изменений мы можем иметь более одного тега отката. Они выполняются в порядке появления в changeset:


    
        
        
    
    
        
        
    
    
        
    
    
        
    

4.3. Обратитесь к другому набору изменений для отката

Мы можем ссылаться на другой набор изменений, возможно, на оригинальный набор изменений, если мы собираемся изменить некоторые детали базы данных. Это уменьшит дублирование кода и может правильно отменить сделанные изменения:


    
    
    

4.4. Пустой тег отката

По умолчанию Liquibase пытается сгенерировать сценарий отката, если мы не предоставили. Если нам нужно отключить эту функцию, у нас может быть пустой тег отката, чтобы операция отката не возвращалась:


    
        
        
        
    
    

5. Параметры команды отката

Помимо отката базы данных в предыдущее состояние, Liquibase можно использовать по-разному. Это генерация SQL отката, создание сценария отката в будущем, и, наконец, мы можем протестировать миграцию и откат, оба за один шаг.

5.1. Создать сценарий отката

Так же, как откат, у нас есть три варианта для генерации отката SQL. Это:

  • rollbackSQL<tag> - скрипт отката базы данных до указанного тега

  • rollbackToDateSQL<date/time> - сценарий SQL для отката базы данных до состояния на указанную дату / время

  • rollbackCountSQL<value> - сценарий SQL для отката базы данных к состоянию, указанному на количество шагов до

Давайте посмотрим на один из примеров в действии:

mvn liquibase:rollbackCountSQL 2

5.2. Сгенерировать сценарий будущего отката

Эта команда генерирует необходимые команды SQL отката, чтобы привести базу данных в текущее состояние из состояния, в котором завершены наборы изменений, которые могут быть запущены в данный момент. Это будет очень полезно, если есть необходимость предоставить скрипт отката для изменения, которое мы собираемся выполнить:

Это будет очень полезно, если есть необходимость предоставить скрипт отката для изменения, которое мы собираемся выполнить:

mvn liquibase:futureRollbackSQL

5.3. Запустить откат тестирования обновлений

Эта команда выполняет обновление базы данных, а затем откатывает наборы изменений, чтобы привести базу данных в текущее состояние. Откат как в будущем, так и в тесте обновления не изменяет текущую базу данных после завершения выполнения. Но откат тестирования обновления выполняет фактическую миграцию, а затем откатывает ее.

Это можно использовать для проверки выполнения изменений обновления без постоянного изменения базы данных:

mvn liquibase:updateTestingRollback

6. Заключение

В этом кратком руководстве мы рассмотрели некоторые функции командной строки и изменений в функциональности отката Liquibase.

Как всегда, исходный код можно найтиover on GitHub.