Liquibase前提条件MARK_RAN无效

时间:2016-08-25 19:26:21

标签: xml liquibase

我有以下变更集,使用LiquiBase 3.5.1(最新):

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">

    <preConditions onFail="MARK_RAN">
        <sqlCheck expectedResult="2">SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo';</sqlCheck>
    </preConditions>
    <changeSet author="user" id="base">
        <sqlFile path="liquibase/base.sql"/>
    </changeSet>
</databaseChangeLog>

看起来很简单吧?我们的想法是检查数据库是否为空(检查自动生成的Liquibase表的2个表),如果是,则运行基本脚本。但是,如果失败,则应将变更集标记为运行并继续(功能here的文档)。但是,我收到以下错误:

Value 'MARK_RAN' is not facet-valid with respect to enumeration '[HALT, WARN]'.

1 个答案:

答案 0 :(得分:0)

Liquibase区分更改日志级别的前提条件 变更集级别的前提条件。 在变更集之外(例如,在更改日志的开头),只有HALT和WARN是可能的值。

查看xsd schema

有两种类型:onChangeSetPreconditionErrorOrFail和onChangeLogPreconditionErrorOrFail

您可以按如下方式更改脚本:

<changeSet author="user" id="base">
    <preConditions onFail="MARK_RAN">
    <sqlCheck expectedResult="2">SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo';</sqlCheck>
    </preConditions>
    <sqlFile path="liquibase/base.sql"/>
</changeSet>