2017-10-18 60 views
0

摘要Liquibase先决条件的Groovy语法是什么?

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

列名: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') 
     } 
    }    
} 

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

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

+1

如果您已经在使用Liquibase,您确实不需要具备先决条件。 – SteveDonie

回答

0

您的变更集看起来不错IMO,但我不知道'默认'属性,对于column和约束标记都不是。 tableName和columnName后面的等号也应该是冒号。 但是,如果XML版本运行,我会说groovy版本也会运行。

您可以省略not一行中的圆括号。 您也可能想要将onFail的值更改为MARK_RAN,因此liquibase不会在下次尝试运行它。

我会测试按以下顺序变化:

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