Liquibase将列类型从Date更改为DateTime而不删除包含的值

时间:2016-05-27 22:30:00

标签: java date datetime database-migration liquibase

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

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

我的表文档包含列(id,name,dueDate)。 dueDate列的类型为Date,我想将其类型从DATE更改为DATETIME。

我采用了以下策略

1-创建一个类型为DATETIME

的新列duedatenew

从duedate列到duedatenew的2-副本值

3-删除列duedate

4-重命名列duedatenew to 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>

但是在第二步中变更集的执行总是失败。数据副本总是失败。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我正在观看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>