我有一张table temp
在使用liquibase创建的sql server中
表的分解更改日志 temp
是
databaseChangeLog:
- changeSet:
author: Author_name
id: create_temp_table
createTable:
tableName: temp
columns:
- column:
name: id
type: BIGINT
constraints:
primaryKey: 'true'
- column:
name: type
type: VARCHAR(255)
- column:
name: reference
type: VARCHAR(255)
- column:
name: rate
type: VARCHAR(255)
我想修改 rate
从字符串到小数的列。所以我在下面创建了一个新的changelog文件
databaseChangeLog:
- changeSet:
id: modify_column_temp_table
author: Author_name
changes:
- modifyDataType:
columnName: rate
newDataType: DECIMAL(18,4)
tableName: temp
现在,数据库中已经有了一些现有的数据 temp
带的表格 rate
列作为字符串。当 modify_column_temp_table
当changelog运行时,我知道sqlserver会抛出一个cast错误,说string不能从cat到decimal。
如何在同一个changelog中执行脚本或命令,实际修改列的数据和数据类型,以便 rate
是否修改为新的数据类型?
1条答案
按热度按时间vd8tlhqk1#
这是一个常见的情况,它有一个众所周知的决定。您应该创建几个变更集,逐步修改数据库。
使用新名称重命名原始列:
创建具有新数据类型的列:
使用特定于数据库的功能移动和转换数据:
如果希望在工作流中使用回滚功能,可以添加语句。另外,您可以添加forth changeset来删除名为“rate\u number”的列,但是在删除此列之前测试应用程序可能会很有用。
这里的任何ddl语句都需要不同的变更集,因为ddl语句的执行提交了当前事务,并且不能回滚。因此,在更新过程中,应该手动处理liquibase下降的情况。