如何使用grails迁移增加VARCHAR大小

如何使用grails迁移增加VARCHAR大小,grails,database-migration,liquibase,Grails,Database Migration,Liquibase,我使用grails迁移(liquibase)为tableDB\u服务器添加了两个新列SCOMMENT和SURL 最初我定义了长度为255个字符的SCOMMENT和SURL。在下一个版本中,我尝试使用modifyColumn将字符长度增加到1024,如下所示 databaseChangeLog = { changeSet(author: "syam (generated)", id: "changelog-2.3.7") { // Increase maximum len

我使用grails迁移(liquibase)为table
DB\u服务器添加了两个新列
SCOMMENT
SURL

最初我定义了长度为255个字符的
SCOMMENT
SURL
。在下一个版本中,我尝试使用
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没有看到newDataType属性,因此抛出验证错误,但您正在设置它。我能够用标准的liquibase和xml或json运行类似的变更集,所以这可能是GrailsDSL的一个问题。也许值得向他们提出一个问题


如果grails解析有问题,您可以始终返回到“sql”命令,也可以直接传递ALTER TABLE语句。

您发布的示例有输入错误。您有一个等号,其中应该有一个冒号:

改变

modifyDataType(columnName:"SCOMMENT", tableName:"DB_SERVER", newDataType="VARCHAR2(1024 CHAR)")


我不得不做同样的事情,复制了你的代码,得到了同样的错误。我发现您有一个输入错误:您必须在“newDataType=…”中将“=”替换为“:”。然后,我对该修复没有错误

根据您使用的数据库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)")
    }
}

这可能很接近,但你应该删除“CHAR”,对吗?它不应该是VARCHAR2(1024)吗?消息似乎在说您没有指定类型,但这可能是因为这是一种意外的格式。当您在客户端手动执行此操作时,这是否有效?在没有“CHAR”的情况下进行了尝试,但再次出现相同的错误。我通常通过
dbm gorm diff
生成变更日志。changelog-2.3.6(第一个块中的代码)是生成的精确代码。是的,在客户端手动修改工作正常。我使用的是grails版本2.2.4和database-migration-1.3.2。这是旧版本的问题吗。
modifyDataType(columnName:"SCOMMENT", tableName:"DB_SERVER", newDataType:"VARCHAR2(1024 CHAR)")
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)")
    }
}