Liquibase 将列类型从日期更改为日期时间而不删除包含的值
Liquibase change column type from Date to DateTime without deleting contained values
我正在使用 Liquibase 进行数据迁移。
我有一个名为 table 的文档,其中已经包含值。
我的 table 文档包含列(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 函数,所以 select 查询将不起作用。 .
但是,根据 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>
我正在使用 Liquibase 进行数据迁移。
我有一个名为 table 的文档,其中已经包含值。
我的 table 文档包含列(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 函数,所以 select 查询将不起作用。 .
但是,根据 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>