Liquibase前置条件的Groovy语法是什么?

时间:2017-10-18 12:31:04

标签: xml groovy liquibase mysql5

  

摘要

如果表不存在,我必须在表上添加一列。

列名: myColumn

表名: myTable

使用Groovy语言和Liquibase,我想检查列是否存在,如果它不存在则创建它。

  

Liquibase

XML

根据我的搜索,实现此目的的XML方式是:

<changeSet id="myChangeSet" author="me">
    <preconditions onFail="WARN">
        <not>
            <columnExists tableName="myTable" columnName="myColumn" />     
        </not>
    </preconditions>
    <addColumn tableName="myTable">
        <column name="myColumn" type="text" default="null" />
    </addColumn>
</changeSet>

Groovy的

至于Groovy版本,我不确定,我没有办法测试它。

changeSet(id:'myChangeSet', author:'me') {
    preconditions(onFail:'WARN') {
        not() { 
            columnExists(tableName='myTable' columnName='myColumn') 
        }            
    }
    addColumn(tableName:'myTable') {
        column(name:'myColumn' type:'text') {
            constraint(default:'null')
        }
    }            
}

我不确定关于如何将上层XML版本转换为Groovy的Grrovy语法。

如何将XML变更集转换为Grovy,请告诉我?

1 个答案:

答案 0 :(得分:0)

你的变更集看起来很好IMO,但我不知道&#39;默认&#39;属性,既不是column,也不是约束标记。 tableName和columnName后面的等号也应该是冒号。 但是,如果运行XML版本,我会说groovy版本也会运行。

您可以省略not行中的圆括号。 您也可能希望将onFail值更改为MARK_RAN,以便liquibase下次不会尝试运行它。

我会按以下顺序测试更改:

  • 使用没有列的测试数据库
  • 让变更集运行
  • 查看DATABASECHANGELOG表并搜索变更集。您应该在EXECUTED列中看到EXECTYPE,在DESCRIPTION列中看到一些不错的内容。检查数据库是否已按预期进行了修改。
  • 删除DATABASECHANGELOG表中变更集的列,然后启动应用程序/重新运行更改日志。变更集将再次运行。
  • 再看一下DATABASECHANGELOG表。现在您应该再次看到该行,但EXECTYPE应为MARK_RAN