我正在使用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>
但是在第二步中变更集的执行总是失败。数据副本总是失败。
我该如何解决这个问题?
答案 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>