xml - Liquibase 前提条件 MARK_RAN 无效

标签 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]'.

最佳答案

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>

关于xml - Liquibase 前提条件 MARK_RAN 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153287/

相关文章:

java - 如何在 spring 中找到与 spring.xml 不在同一级别的文件?

mysql - 通过 Liquibase 重命名主键列,自动增量被删除(MySQL)

mysql - 如何使用sql向该表添加约束?

mysql - ExtractValue 在 mysql 中处理和解析 XML 非常慢

java - 如何在解码时捕获多次出现的 xml 到 pojo?

xml - 逐行读取 XML 文件

c# - 使用 .NET/C# 将 byte[] 转换为 XML

java - 使用 Liquibase 从现有数据库(包括存储过程)创建数据库变更日志 xml 文件

postgresql - 使用格式化的 SQL + XML 标记数据库

java - Liquibase 回滚自定义 SQL