我们正在使用liquidbase 1.9.5,但我还没有看到这个版本的已知错误。简而言之,我们成功地在1.0版本中运行了liquidbase,但是当我们试图运行1.1版本(有额外的changeSets)时,它会报错1.0版本的md5sum。
我们在短期内通过在DATABASECHANGELOG中清空md5sum列来解决它,但我想知道我是否只是做错了什么。
我们的液体库组织如下:我们在每次部署中运行的一个主.xml文件,其中仅包含针对每个版本软件的单独文件的命令(以正确的顺序)
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
<include file="v1_0.xml" />
<include file="v1_1.xml" />
</databaseChangeLog>
所以第一个版本只包含v11.0 .xml,而我们刚刚推出的版本包含了上面的内容。
v1_0.xml文件在不同版本之间没有变化,但是在尝试为新版本调用liquibase时,我们得到了以下错误:
SEVERE: Validation Failed:
1 change sets check sum
v1_0.xml::foo_schema::bdeacon::(MD5Sum: ff63b8d1739e6cf1dcaed6a0ef585257)
正在讨论的changeSet:
<changeSet author="bdeacon" id="foo_schema">
<preConditions onFail="MARK_RAN">
<not><tableExists tableName="some_table"/></not>
</preConditions>
<sqlFile path="database/initial/foo-schema.sql" />
</changeSet>
foo-schema。所引用的SQL文件在不同版本之间也没有改变。(它为我们初始创建整个数据库模式,然后包括先决条件中提到的"some_table"。)
我希望liquidbase不希望我们在版本之间手动添加validCheckSum元素到每个changeSet…
您不需要添加validCheckSum,除非changeSet或sql文件的内容发生了变化。
是否有任何东西,如SVN版本号或空格/行结尾,可能会在foo-schema.sql中发生变化?
可以将" runOnChange "的changeSet属性设置为true。在这种情况下,只要变更集引用的任何sql文件被更改,该变更集将再次运行并更新其校验和。请参阅liquidbase文档中的ChangeSet Check sum部分。当包/过程/触发器代码使用像"CREATE或REPLACE"这样的语句时,它特别有用,在这种情况下,您不需要在调用sql文件之前使用drop语句来避免"…