Liquibase添加默认值而不是空约束

时间:2014-11-26 07:19:34

标签: liquibase

我对Liquibase有点新鲜。我遇到了一个场景,在一个changeSet中,它首先尝试添加默认值而不是旁边的空约束。

但是这里的问题是<addDefaultValue/><addNotNullConstraint/>标签都有默认值属性,所以最终我得到了一个例外。

以下是我拥有的changeSet

<changeSet id="f3047816-2d48-4341-a4ce-deface083cea" author="MineStar" failOnError="true">
  <preConditions onFailMessage="Ignored AlterColumn for REHANDLE of table LOCATION as column does not exist or already has a NOT NULL constraint." onFail="MARK_RAN">
    <columnExists tableName="LOCATION" columnName="REHANDLE"/>
    <ext:columnIsNullable tableName="LOCATION" columnName="REHANDLE"/>
  </preConditions>
  <comment>AHS-1373: AlterColumn LOCATION.REHANDLE - nullability changed from true to false - defaultValue changed from 'null' to '0'</comment>
  <addDefaultValue columnName="REHANDLE" columnDataType="BOOLEAN" defaultValueNumeric="0" tableName="LOCATION"/>
  <addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/>
</changeSet>

这里有一个我可以看到的奇怪的事情是,如果我重新排列添加默认值的顺序而不是空约束标签我不会得到任何首先添加非空约束的异常,然后是默认值,如下所示。但我不应该这样做,因为它影响数据库中的校验和所有我可以做的是添加一个新的changeSet来解决异常。

<addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/>

<addDefaultValue columnName="REHANDLE" columnDataType="BOOLEAN" defaultValueNumeric="0" tableName="LOCATION"/>.

1 个答案:

答案 0 :(得分:5)

defautlNullValue中的addNotNullConstraintdefaultValueNumeric中的addDefaultValue之间存在差异。使用addDefaultValue只为插入到列中的未来行设置默认值,但defaultNullValue中的addNotNullConstraint将导致liquibase生成update location set rehandle=0 where rehandle is null的其他SQL语句以更改值已存在的行,以便可以添加空约束。

我认为任何一个订单都可以正常工作,你看到了什么例外?