Liquibase diff без индексов завершается ошибкой при объявлении diffChangeLog

Я новичок в Liquibase, и я играл с командой diff. Он работает отлично, но недавно обнаружил это, и я не могу понять, почему он не работает в этом конкретном контексте.

поэтому основная проблема в том, что я хочу сравнить две базы данных, но без индексов. они динамически генерируются на первичных ключах и получают разные имена, но фактически эквивалентны. Liquibase не понимает, поэтому я хочу запустить diff без индексов.

поэтому я добавляю это в свой pom.xml:

<diffTypes>tables, views, columns, primaryKeys, foreignKeys, uniqueconstraints</diffTypes>

он работает, как ожидалось, Liquibase не сравнивает индексы.

на следующем шаге я хочу сгенерировать diff как журнал изменений, поэтому я добавляю файл diffChangeLog

<diffTypes>tables, views, columns, primaryKeys, foreignKeys, uniqueconstraints</diffTypes>
<diffChangeLogFile>src/main/diffs/diff_test.xml</diffChangeLogFile>

при запуске Liquibase: diff происходит сбой:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:diff (default-cli) on project liquibase_artifactID: Error setting up or running Liquibase: liquibase.command.CommandExecutionException: liquibase.exception.UnexpectedLiquibaseException: Could not resolve MissingObjectChangeGenerator dependencies due to dependency cycle. Dependencies:
[ERROR] [] -> Catalog -> []
[ERROR] [] -> Schema -> []
[ERROR] [Index] -> ForeignKey -> []
[ERROR] [] -> UniqueConstraint -> []
[ERROR] [] -> Column -> []
[ERROR] [] -> Table -> []
[ERROR] [] -> PrimaryKey -> []
[ERROR] [] -> View -> []
[ERROR] -> [Help 1]

Почему ликвибаза действует так? Является ли "незаконным" создание diffChangeLog без индексов?

При включении индексов в diffTypes он работает, но сгенерированный журнал изменений нельзя использовать, потому что Liquibase хочет изменить индексы с помощью createIndex и dropIndex. Но эти операторы не являются исполняемыми (он не может отбросить индекс по первичным ключам и не может создать индекс, если он уже существует).

Есть идеи, как создать полезный журнал изменений без индексов? Или я просто что-то упустил?


person Bastian    schedule 24.08.2015    source источник
comment
Ознакомьтесь с документацией на странице difftypes. В нем говорится, что difftypes работает только с командой generateChangeLog, а не с командами diff или diffChangeLog. Я не знаю причины этого.   -  person Jens    schedule 25.08.2015


Ответы (1)


Ответ на вопрос содержится в сообщении об исключении:

Could not resolve MissingObjectChangeGenerator dependencies due to dependency cycle.

Затем он перечисляет зависимости.

Внутри Liquibase создает ориентированный граф зависимостей и следит за тем, чтобы все зависимости были удовлетворены. Если вы хотите увидеть код, который делает это, см. Класс DiffToChangeLog и его внутренний частный класс DependencyGraph

person SteveDonie    schedule 25.08.2015