我发现 liquibase 使用更改日志文件的完整路径来计算校验和。
此行为限制修改更改日志文件名,并在重命名文件后尝试再次重新应用更改集。
有没有办法将 liquibase 配置为仅使用更改日志 id 来计算 cuecksum?
请提供您宝贵的想法。
我发现 liquibase 使用更改日志文件的完整路径来计算校验和。
此行为限制修改更改日志文件名,并在重命名文件后尝试再次重新应用更改集。
有没有办法将 liquibase 配置为仅使用更改日志 id 来计算 cuecksum?
请提供您宝贵的想法。
使用标签的属性logicalFilePath
。databaseChangeLog
上游开发者推荐使用logicalFilePath
并建议对DATABASECHANGELOG.FILENAME
列进行直接更新:
用完整路径修复损坏的条目。
如果您将散列设置DATABASECHANGELOG.MD5SUM
为null
在下一次 LiquiBase 运行时触发散列重新计算。这是必要的,因为哈希算法也将移动部分包含在结果中。
我遇到了同样的问题,并在下面找到了解决方案。
如果您使用的是 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
您放入的任何内容放入表格logicalFilePath
的FILENAME
列中DATABASECHANGELOG
一个非常相似的问题 - 您可能只想忽略changelog-master.xml
文件之前的路径部分。在我的场景中,我已经签出了一个项目,C:\DEV\workspace
而我的同事已经签出了该项目C:\another_folder\TheWorkspace
。
像其他人建议的那样,您需要在元素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"/>