【发布时间】:2021-08-26 21:43:30
【问题描述】:
我正在使用带有 LiquibaseScript 的 PostgreSQL。
我正在尝试将列的数据类型从 BIGINT 更改为 BIGINT[]。由于底层数据库不允许更改,我正在创建一个类型为 BIGINT[] 的新列并删除 int 一个。 我需要将现有数据从旧列复制到新列,逐行复制。 我尝试了以下更改
`<addColumn tableName="table1">
<!-- <column name="new_column" type="BIGINT[]" value="ARRAY[old_column]"></column> -->
<column name="new_column" type="BIGINT[]" value="(select ARRAY[old_column] from table1)"></column>
</addColumn>`
第一个选项没有抛出任何错误,但没有工作。 第二个选项不起作用,因为它需要 where 条件,而且我不知道如何为所有行传递属于同一行的标识。
感谢任何帮助。提前致谢。
【问题讨论】:
-
UPDATE Promotion SET new_column=ARRAY[old_column] 这个正在工作,但正在检查除本机查询之外的任何替代方案。 -
不正确:postgresql 确实允许
ALTER TABLE promotion ALTER COLUMN bar TYPE bigint[] USING array[ bar ]; -
我发现了我的错误,因为我正在尝试将 newDataType 设置为 BIGINT[] 的
。谢谢,它更改了数据类型并重命名了列,但它没有复制原始数据。我错过了什么吗? -
它应该将现有数据的副本转换为单元素数组。
标签: java postgresql spring-boot spring-data-jpa liquibase