声明diffChangeLog时,没有索引的Liquibase diff失败



我是新来的liquibase,我正在玩diff命令。它工作得很好,但最近发现了这个,我不明白为什么它在这个特定的上下文中不起作用。

所以主要的问题是我想比较两个数据库,但没有索引。它们是在主键上动态生成的,具有不同的名称,但实际上是等效的。Liquibase不理解,所以我想运行diff不带索引。

所以我把这个添加到pom。xml中:

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

按预期运行,liquibase不比较索引

在下一步中,我想要生成diff作为变更日志,所以我添加了一个diffChangeLog-File

<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]

为什么liquid base是这样的?生成没有索引的diffChangeLog是"非法的"吗?

当包含索引到diffTypes时,它可以工作,但是生成的Changelog是不可用的,因为liquidbase想要用createIndex和dropIndex更改索引。但是这些语句是不可执行的(它不能在主键上删除索引,并且当索引已经存在时它不能创建索引)。

你知道如何在没有索引的情况下生成可用的变更日志吗?还是我错过了什么?

问题的答案就在异常消息中:

Could not resolve MissingObjectChangeGenerator dependencies due to dependency cycle.

然后列出依赖项。

在内部,Liquibase正在生成依赖关系的有向图,并确保所有依赖关系都得到满足。如果您想查看实现此功能的代码,请参阅类DiffToChangeLog及其内部私有类DependencyGraph

相关内容

  • 没有找到相关文章

最新更新