Откат не работает в ревизии жидкости - PullRequest
0 голосов
/ 10 апреля 2020

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

<changeSet author="me" id="123123">
    <sql>
        INSERT INTO employee (id, name) VALUES ('adad', 'test')
    </sql>
    <rollback/>
</changeSet>

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

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

Категории миграции Liquibase

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

automati c, где миграция может детерминистически генерировать шаги, необходимые для отката вручную, где нам нужно выполнить команду отката, потому что инструкция по миграции не может использоваться для детерминированной идентификации оператора. Например, откат оператора «create table» будет «drop» созданной таблицы. Это может быть определено без сомнения, и, следовательно, оператор отката может быть сгенерирован автоматически.

С другой стороны, оператор отката для команды «drop table» определить невозможно. Невозможно определить последнее состояние таблицы, и, следовательно, оператор отката не может быть сгенерирован автоматически. Для этих типов операторов переноса требуются инструкции по откату вручную.

Вот один пример вышеприведенного оператора

<changeSet id="testRollback" author="stackoverflow">
    <createTable tableName="stackoverflow_turorial">
        <column name="id" type="int"/>
        <column name="heading" type="varchar(36)"/>
        <column name="author" type="varchar(36)"/>
    </createTable>
    <rollback>
        <dropTable tableName="stackoverflow_test"/>
    </rollback>
</changeSet>

Так что в вашем случае откат не может оставаться пустым и ему должен быть дан некоторый оператор.

Давайте исправим ваш код.

 <changeSet author="me" id="123123">
        <sql>INSERT INTO EMPLOYEE (id, name) VALUES ('adad', 'test')</sql>
        <rollback>DELETE FROM EMPLOYEE WHERE ID = 'adad'</rollback>   
    </changeSet>

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

mvn liquibase:update

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

mvn liquibase:rollback

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

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

  1. rollbackTag
  2. rollbackCount
  3. rollbackDate

    Откат к тегу

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

mvn liquibase:rollback -Dliquibase.rollbackTag=1.0

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

Откат по счетчику

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

mvn liquibase:rollback -Dliquibase.rollbackCount=1

Откат к дате

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

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

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

Также вы можете упомянуть sql в другом файле sql и можете дать ссылку здесь.

0 голосов
/ 13 апреля 2020

Пустой тег отката определяется, если откат невозможен / необходим.

Чтобы выполнить откат, вы должны написать sql для отката:

<changeSet author="me" id="123123">
    <sql>
        INSERT INTO EMPLOYEE (id, name) VALUES ('adad', 'test')
    </sql>
    <rollback>
        DELETE FROM EMPLOYEE WHERE ID = 'adad'
    </rollback>   
</changeSet>

Вы можете проверить больше примеры здесь

...