【问题标题】:Liquibase adding default value and not null constraintLiquibase 添加默认值而不是空约束
【发布时间】:2014-11-26 07:19:34
【问题描述】:

我对 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"/>.

【问题讨论】:

  • 为什么不直接从addNotNullConstraint 标签中删除defaultNullValue="0"(或者完全删除addDefaultValue)?
  • 不,我不能编辑现有的变更集,因为这会改变变更集的校验和,这意味着任何已经运行旧变更集的人都会遇到这个问题。所以我所能做的就是创建一个新的变更集来解决这个问题,并使现有的变更集保持不变。
  • 即使我从 addNotNullConstraint 标记中删除 defaultNullValue="0" 它仍然会抛出异常。

标签: liquibase


【解决方案1】:

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

我认为任何一个命令都可以正常工作,你看到了什么异常?

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2021-04-26
    • 2016-07-08
    • 2011-01-06
    • 2011-05-17
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多