摘要
如果表不存在,我必须在表上添加一列。
列名: 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,请告诉我?
答案 0 :(得分:0)
你的变更集看起来很好IMO,但我不知道&#39;默认&#39;属性,既不是column,也不是约束标记。 tableName和columnName后面的等号也应该是冒号。 但是,如果运行XML版本,我会说groovy版本也会运行。
您可以省略not
行中的圆括号。
您也可能希望将onFail
值更改为MARK_RAN
,以便liquibase下次不会尝试运行它。
我会按以下顺序测试更改:
DATABASECHANGELOG
表并搜索变更集。您应该在EXECUTED
列中看到EXECTYPE
,在DESCRIPTION
列中看到一些不错的内容。检查数据库是否已按预期进行了修改。DATABASECHANGELOG
表中变更集的列,然后启动应用程序/重新运行更改日志。变更集将再次运行。DATABASECHANGELOG
表。现在您应该再次看到该行,但EXECTYPE
应为MARK_RAN
。