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

Posted

技术标签:

【中文标题】如何使用 grails 迁移增加 VARCHAR 大小【英文标题】:How to increase VARCHAR size using grails migration 【发布时间】:2015-02-06 02:21:35 【问题描述】:

我使用 grails 迁移 (liquibase) 为表 DB_SERVER 添加了 2 个新列 SCOMMENTSURL

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")
                
        
    

最初我将SCOMMENTSURL 定义为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

SCOMMENTSURL 的字符长度如何更改?

【问题讨论】:

这可能很接近,但您应该删除“CHAR”,对吗?不应该只是 VARCHAR2(1024) 吗?该消息似乎在说您没有指定类型,但这可能是因为它是一种意外的格式。当您在客户端手动执行此操作时,这是否有效? 尝试不使用“CHAR”并再次遇到相同的错误。我通常通过dbm-gorm-diff 生成changelogchangelog-2.3.6(第一个块中的代码)是生成的确切代码。是的,手动修改客户端工作正常。 我正在使用 grails version 2.2.4database-migration-1.3.2。是不是老版本的问题。 【参考方案1】:

该错误是 Liquibase 错误,而不是数据库错误。 Liquibase 没有看到 newDataType 属性,因此会引发验证错误,但您正在设置它。我可以使用标准的 liquibase 和 xml 或 json 运行类似的 changeSet,因此它可能是 grails DSL 的问题。可能值得向他们提出问题。

如果 grails 解析出现问题,您总是可以退回到“sql”命令,直接传递 ALTER TABLE 语句。

【讨论】:

【参考方案2】:

我不得不这样做,复制了您的代码并得到了同样的错误。我发现您有一个错字:您必须在“newDataType=...”中将 '=' 替换为 ':'。然后,我对该修复没有错误。

【讨论】:

【参考方案3】:

您发布的示例有错字。你有一个等号,你应该有一个冒号:

改变

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于如何使用 grails 迁移增加 VARCHAR 大小的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Grails 2.1 迁移到 Grails 2.3 应用程序?

启动后如何运行 Grails 数据库迁移

Grails 2.3 数据库迁移上的“加载插件管理器时出错:TomcatGrailsPlugin”

Grails 数据库迁移 - dbm-gorm-diff 不起作用

从 Roo 迁移到 Grails

手动更改表中的varchar大小后如何同步Flyway迁移文件?