16

我发现 liquibase 使用更改日志文件的完整路径来计算校验和。

此行为限制修改更改日志文件名,并在重命名文件后尝试再次重新应用更改集。

有没有办法将 liquibase 配置为仅使用更改日志 id 来计算 cuecksum?

请提供您宝贵的想法。

4

4 回答 4

14

使用标签的属性logicalFilePathdatabaseChangeLog

于 2013-11-11T08:49:29.963 回答
6

上游开发者推荐使用logicalFilePath并建议对DATABASECHANGELOG.FILENAME列进行直接更新:

用完整路径修复损坏的条目。

如果您将散列设置DATABASECHANGELOG.MD5SUMnull在下一次 LiquiBase 运行时触发散列重新计算。这是必要的,因为哈希算法也将移动部分包含在结果中。

于 2015-12-22T20:18:57.557 回答
5

我遇到了同样的问题,并在下面找到了解决方案。

如果您使用的是 liquibase sql format,那么只需将以下内容放入您的 sql 文件中:

--liquibase formatted sql logicalFilePath:<relative SQL file path like(liquibase/changes.sql)>

如果您使用的是 liquibase xml format,那么只需将以下内容放入您的 xml 文件中:

<databaseChangeLog logicalFilePath=relative XML file path like(liquibase/changes.xml)" ...>
...
</databaseChangeLog>

添加上述logicalFilePath属性后,运行 liquibaseupdate命令。它会将relative file path您放入的任何内容放入表格logicalFilePathFILENAME列中DATABASECHANGELOG

于 2019-02-26T06:11:10.960 回答
3

一个非常相似的问题 - 您可能只想忽略changelog-master.xml文件之前的路径部分。在我的场景中,我已经签出了一个项目,C:\DEV\workspace而我的同事已经签出了该项目C:\another_folder\TheWorkspace

我建议先阅读http://forum.liquibase.org/topic/changeset-uniqueness-causing-issues-with-branched-releases-overlapped-changes-not-allowed-in-different-files

像其他人建议的那样,您需要在元素logicalFilePath上设置属性。<databaseChangeLog>

您还需要changeLogFile在调用 liquibase 时以某种方式指定属性。我从命令行调用它。如果您指定一个绝对或相对路径,changeLogFile 不是类路径,像这样,它将包括 DATABASECHANGELOG 表中的整个路径:

liquibase.bat ^
--changeLogFile=C:\DEV\more\folders\schema\changelog-master.xml ^
...

如果您将迁移移动到上面列出的文件夹以外的任何文件夹,那么 liquibase 将会中断。要修复它(并确保其他开发人员可以使用他们想要的任何工作空间位置),您需要changelogFile从类路径中引用:

liquibase.bat ^
--classpath=C:\DEV\more\folders ^
--changeLogFile=schema/changelog-master.xml ^
...

第一种方式,我的 DATABASECHANGELOG 表有 FILENAME 值(我可能有斜线),比如

C:\DEV\more\folders\schema\subfolder\script.sql

第二种方式,我的 DATABASECHANGELOG 表具有 FILENAME 值,例如

subfolder/script.sql

我满足于使用这样的文件名。每个开发人员都可以从他们想要的任何文件夹运行 liquibase。如果我们决定稍后重命名或移动单个 SQL 文件,那么我们可以在元素的logicalFilePath属性中指定旧值。<changeSet>

作为参考,我的changelog-master.xml只是由像这样的元素组成

<include file="subfolder/script.sql" relativeToChangelogFile="true"/>
于 2017-08-11T22:37:50.150 回答