You need to enable JavaScript to run this app. Liquibase操作PostgreSQL:如何将BIGINT列值复制到BIGINT[]数组列
优惠活动
大模型
产品
解决方案
定价
更多

Liquibase操作PostgreSQL:如何将BIGINT列值复制到BIGINT[]数组列

实现PostgreSQL字段从BIGINT到BIGINT[]的Liquibase变更方案

错误原因说明

你之前的写法不生效是因为<addColumn>标签的value属性仅支持传入静态常量,无法动态引用同表当前行的其他字段值;子查询写法会返回多行结果,因此触发要求添加where条件的报错。

正确操作步骤

  • 第一步:先新增BIGINT[]类型的空列,不赋值
<addColumn tableName="table1">
    <column name="new_column" type="BIGINT[]" />
</addColumn>
  • 第二步:逐行迁移旧列数据到新列
    使用valueComputed属性传入数据库计算表达式,实现每行旧值转数组写入新列:
<update tableName="table1">
    <column name="new_column" valueComputed="ARRAY[old_column]" />
</update>

也可以直接使用原生SQL标签实现:

<sql>
UPDATE table1 SET new_column = ARRAY[old_column];
</sql>
  • 第三步(可选,数据校验无误后执行):删除旧列,按需将新列重命名为原列名
<dropColumn tableName="table1" columnName="old_column" />
<renameColumn tableName="table1" oldColumnName="new_column" newColumnName="old_column" />

注意事项

  1. 执行变更前必须备份表数据,避免操作失误导致数据丢失
  2. 若操作的是大表,需提前评估全量更新的锁表时长对业务的影响
  3. 建议添加<rollback>标签配置回滚逻辑,方便变更失败时快速恢复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:24:04