java - Liquibase 将列类型从日期更改为日期时间而不删除包含的值

标签 java date datetime database-migration liquibase

我正在使用 Liquibase 进行数据迁移。

我有一个名为 Document 的表,其中已包含值。

我的表文档包含列(id、名称、到期日期)。 dueDate 列的类型是 Date,我想将他的类型从 DATE 更改为 DATETIME。

我采取了以下策略

1- 创建一个 DATETIME 类型的新列 duedatenew

2- 将值从列 duedate 复制到 duedatenew

3- 删除截止日期列

4- 将列 duedatenew 重命名为 duedate

如以下变更集中所述

  <changeSet id="task-99" author="blaise">
        <addColumn tableName="document">
            <column name="duedatenew" type="DATETIME" />
        </addColumn>
        <update tableName="document">
            <column name="duedatenew" valueComputed="(SELECT duedate FROM document)" />
        </update>
        <dropColumn tableName="document" columnName="duedate" />
        <renameColumn tableName="document" oldColumnName="duedatenew"
        newColumnName="duedate" />
</changeSet>

但是在第二步执行变更集总是失败。数据复制总是失败。

请问我该如何解决?

最佳答案

我在看column文档...看来 valueComputed 应该指向一个 sql 函数,所以选择查询将不起作用...

但是,根据this ,您最好的选择是使用 sql 标记根据需要执行更新...示例:

<changeSet id="task-99" author="blaise">
    <addColumn tableName="document">
        <column name="duedatenew" type="DATETIME" />
    </addColumn>
    <sql>update document set duedatenew = duedate</sql>
    <dropColumn tableName="document" columnName="duedate" />
    <renameColumn tableName="document" oldColumnName="duedatenew"
    newColumnName="duedate" />
</changeSet>

关于java - Liquibase 将列类型从日期更改为日期时间而不删除包含的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493158/

相关文章:

Postgresql 埃塞俄比亚日期格式

date - 如何在 jqGrid 中对 "days ago"格式的日期进行排序?

java - Java 条件时间格式化

javascript - Intl.DateTimeFormat 在节点和浏览器中以不同的方式工作

java - 检查一个数组是否大于另一个

java - 在不同语言语法之间转换正则表达式的工具?

java - 在 Java 中打印整数数组的唯一值的总和

php - 如何从日期找到一个月的最后一天?

c# - 自定义日期格式解析

java - 满足特定条件时结束 "infinite"流