我使用 grails migration (liquibase) 为表 DB_SERVER
添加了 2 个新列SCOMMENT
和SURL
databaseChangeLog = {
changeSet(author: "syam (generated)", id: "changelog-2.3.6") {
addColumn(tableName:"DB_SERVER"){
column(name:"SCOMMENT", type:"VARCHAR2(255 CHAR)"){
constraints(nullable: "true")
}
}
addColumn(tableName:"DB_SERVER"){
column(name:"SURL", type:"VARCHAR2(255 CHAR)"){
constraints(nullable: "true")
}
}
}
}
最初,我定义了 SCOMMENT
和 SURL
的长度为 255 个字符。在下一个版本中,我尝试使用如下所示modifyColumn
将字符长度增加到 1024
databaseChangeLog = {
changeSet(author: "syam (generated)", id: "changelog-2.3.7") {
// Increase maximum length of characters for scomment field in DbServer
modifyDataType(columnName:"SCOMMENT", tableName:"DB_SERVER", newDataType="VARCHAR2(1024 CHAR)")
//Increase the maximum length of characters for surl field in DbServer
modifyDataType(columnName:"SURL", tableName:"DB_SERVER", newDataType="VARCHAR2(1024 CHAR)")
}
}
当我尝试迁移时,出现以下错误
Error 2014-12-08 13:11:28,086 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: liquibase.exception.ValidationFailedException: Validation Failed:
2 changes have validation failures
newDataType is required, changelog-2.3.7.groovy::changelog-2.3.7::syam(generated)::(Checksum: 3:04f74b0209f64ad261e4a864fcc3c43c)
Message: liquibase.exception.ValidationFailedException: Validation Failed:
2 changes have validation failures
newDataType is required, changelog-2.3.7.groovy::changelog-2.3.7::syam (generated)::(Checksum: 3:04f74b0209f64ad261e4a864fcc3c43c)
Line | Method
->> 262 | run in java.util.concurrent.FutureTask
如何更改SCOMMENT
和SURL
字符的长度?
该错误是 Liquibase 错误,而不是数据库错误。Liquibase 没有看到 newDataType 属性,因此抛出验证错误,但您正在设置它。我能够使用标准 liquibase 和 xml 或 json 运行类似的 changeSet,因此这可能是圣杯 DSL 的问题。可能值得与他们提出问题。
你总是可以回退到"sql"命令,如果grails解析有问题,也可以直接传递ALTER TABLE语句。
我不得不做同样的事情,复制你的代码并得到同样的错误。我发现你有一个错字:你必须在"newDataType=..."中将"="替换为":"。然后,我对那个修复没有错误。
您发布的示例有拼写错误。 你有一个等号,你应该有一个冒号:
改变
modifyDataType(columnName:"SCOMMENT", tableName:"DB_SERVER", newDataType="VARCHAR2(1024 CHAR)")
自
modifyDataType(columnName:"SCOMMENT", tableName:"DB_SERVER", newDataType:"VARCHAR2(1024 CHAR)")
根据您使用的数据库的数据库 sql 方言,更改集语法会有所不同。使用 MySQL GORM:
databaseChangeLog = {
changeSet(author: "kujalpe (manual)", id: "1493972667393-1") {
comment{'BUG-1 Increase SCOMMENT column size in DB_SERVER table'}
modifyDataType(tableName: "DB_SERVER", columnName: "SCOMMENT", newDataType: "varchar(1024)")
}
}