You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liquibase脚本中主键列OWNER可空报错,如何修正为非空属性?

问题原因

Liquibase会按照变更集的编写顺序依次执行,单个变更集内部的操作也会按从上到下的顺序执行。报错的核心原因是:

  • 首个变更集内部先创建了可空的OWNER列,紧接着就执行添加主键的操作,主键要求所有包含的列都非空,因此执行到addPrimaryKey步骤时直接报错
  • 你添加的非空约束变更集排在首个变更集之后,错误发生时后续变更集根本没有执行机会,因此不生效
解决方案

分两种场景处理:

场景1:原变更集未在任何环境执行

直接修改首个变更集的OWNER列配置,添加非空约束即可:

<changeSet author="sharakab" id="ALERT_WF:CREATE">
    <createTable catalogName="${rec_owner}" tableName="ALERT_WF" tablespace="${table_space_rec_data}">
        <!-- 其他列保持不变 -->
        <column name="OWNER" type="VARCHAR2(200 CHAR)">
            <constraints nullable="false" />
        </column>
        <!-- 其他列保持不变 -->
    </createTable>
    <addPrimaryKey catalogName="${rec_owner}" columnNames="ALERT_ID,STATUS,VERSION,STATUS_CHANGE_DATE,OWNER,REVIEWER_GRP_DISP_ID" constraintName="PK_ALERT_WF"
                   tableName="ALERT_WF" tablespace="${table_space_rec_index}"/>
</changeSet>

场景2:原变更集已在部分环境执行(不可直接修改原变更集内容)

需要调整变更集的执行逻辑,步骤如下:

  1. 修改原有首个变更集,删除其中的addPrimaryKey节点,同时添加<validCheckSum>ANY</validCheckSum>绕过Liquibase的变更集内容校验,避免已执行过该变更集的环境报错
  2. 新增第一个变更集,给OWNER列添加非空约束
  3. 新增第二个变更集,执行添加主键的操作

三个变更集的示例代码如下:

调整后的原变更集

<changeSet author="sharakab" id="ALERT_WF:CREATE">
    <validCheckSum>ANY</validCheckSum>
    <createTable catalogName="${rec_owner}" tableName="ALERT_WF" tablespace="${table_space_rec_data}">
        <!-- 所有列保持原有配置不变 -->
    </createTable>
    <!-- 删掉原来的addPrimaryKey节点 -->
</changeSet>

新增非空约束变更集

<changeSet id="ALERT_WF::add_non_null_constraint" author="sharakab">
    <addNotNullConstraint catalogName="${rec_owner}" columnDataType="VARCHAR2(200 CHAR)" columnName="OWNER" tableName="ALERT_WF" />         
</changeSet>

新增主键变更集

<changeSet id="ALERT_WF::add_primary_key" author="sharakab">
    <addPrimaryKey catalogName="${rec_owner}" columnNames="ALERT_ID,STATUS,VERSION,STATUS_CHANGE_DATE,OWNER,REVIEWER_GRP_DISP_ID" constraintName="PK_ALERT_WF"
                   tableName="ALERT_WF" tablespace="${table_space_rec_index}"/>
</changeSet>

内容的提问来源于stack exchange,提问作者Akash Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:24:03