Как откатить базу данных с помощью liquibase - PullRequest
0 голосов
/ 17 октября 2019

Я использую в своем проекте liquibase для переноса базы данных.

У меня есть эта зависимость в моем pom:

    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
    </dependency>

и в application.properties это свойство:

spring.liquibase.change-log=classpath:/db/changelogs/changelog-master.xml

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

Можете ли выподскажите как это сделать?

1 Ответ

0 голосов
/ 21 октября 2019

Как уже упоминалось в комментариях, предпочтительный способ исправления ошибок - добавление новых наборов изменений. Но если наборы изменений еще не зафиксированы (они существуют только на вашем локальном компьютере), возможно, было бы лучше откатить и исправить набор изменений. И если ошибка приведет к потере данных, у вас нет другого варианта, кроме как исправить его, изменив набор изменений до того, как он достигнет производства, даже если он уже зафиксирован.

Liquibase имеет функции отката для поддержки этого:

См. https://www.liquibase.org/documentation/command_line.html для команд и опций. Но это возможно только в том случае, если все наборы изменений содержат всю необходимую информацию для возможности отката. Смотрите https://www.liquibase.org/documentation/rollback.html. Чтобы свести к минимуму необходимые усилия для создания наборов изменений с информацией об откате, необходимо помнить несколько вещей:

  1. Предпочитать использовать Liquibase XML вместо сценариев sql, поскольку при этом для всех создается и добавляется столбец. и ограничения, Liquibase знает, как выполнить откат без какой-либо дополнительной информации. Для сценариев sql Liquibase может выполнить откат только в том случае, если вы предоставите требуемые операторы, и это означает, что вы тоже можете допускать ошибки.
  2. Поместите каждое действие DDL в отдельный набор изменений, чтобы избежать сбоя SQL в наборах изменений, приводящего к завершению базы данныхв неясном состоянии (извиняется половина набора изменений).
  3. Никогда не удаляйте набор изменений полностью из журнала, если существует какая-либо база данных, где она была выполнена и еще не откатана. Удаление набора изменений делает невозможным откат в базах данных, в которых он уже был выполнен.

Если набор изменений уже зафиксирован и вам необходимо его изменить, тег validCheckSum (см. https://www.liquibase.org/documentation/changeset.html) может быть полезенНо вы должны быть очень осторожны при его использовании.

...