如何使用 Grails 的数据库迁移插件的 Groovy DSL 修改列?

Posted

技术标签:

【中文标题】如何使用 Grails 的数据库迁移插件的 Groovy DSL 修改列?【英文标题】:How do I modify a column using Grails' database migration plugin's Groovy DSL? 【发布时间】:2011-09-07 06:30:39 【问题描述】:

您能给我一个使用modifyDataType 方法的常规变更集的示例吗?

我试过了:

databaseChangeLog = 
  changeSet(author: "user", id: "5-1") 
        modifyDataType(tableName: "test", columnName: "description4", newDataType: "int(11)")
    

modifyDataType 无法识别。我也试过modifyColumn,但我得到了相同的结果。

根本问题是:dsl支持什么样的标签,它们是如何使用的?

【问题讨论】:

由于该插件仍在开发中(当前版本为 0.2.1),文档可能不像插件达到 v1.0 时那样完整。我原以为它会支持任何liquibase refactoring,但鉴于您的经验,显然不是?您可以随时尝试opening a JIRA issue 看看是否可以将其添加到文档中。 此外,FWIW 更改域属性的名称并运行 dbm-gorm-diff file.groovy 会使用 dropColumnaddColumn 创建变更集,而不是使用修改。也许列重命名/修改在路线图上。您可能可以编写自己的自定义变更集以在短期内迁移数据。 虽然插件仅在 v0.2.1 版本,但它非常稳定,实际上是 1.0 版本的候选版本。在官方 1.0 之前,我想解决几个未解决的问题,当然它需要更多文档,但除此之外它基本上是功能完整的。 @Burt - 同意它是稳定的(我并不是真的打算暗示它不是)。我已经使用它一段时间了,并且对它非常满意。感谢您的开发。 【参考方案1】:

它将像这样工作:

databaseChangeLog = 

  changeSet(author: "test (generated)", id: "1422541392309-2") 
    comment  'Rename tabTitle to tabName' 
    renameColumn(tableName: "user", oldColumnName: "tab_title", newColumnName: "tab_name", columnDataType: "varchar(255)")
  

【讨论】:

【参考方案2】:

所有的 Liquibase 重构都应该有效 - Groovy DSL 反映了 Liquibase XML。我没有对 modifyDataType 进行测试,但将其添加到我的测试脚本中并且效果很好 - 请参阅 https://github.com/grails-plugins/grails-database-migration/blob/master/testapp/price.changelog.groovy

如果您可以显示一些有关它如何失败的信息,那么找出问题所在会很有用。

【讨论】:

Master 现在是 Grails 3 插件,显然测试应用程序已移动(我没有处理 Grails 3 更新)。但老插件在“1.x”分支,引用文件为here

以上是关于如何使用 Grails 的数据库迁移插件的 Groovy DSL 修改列?的主要内容,如果未能解决你的问题,请参考以下文章

Grails 数据库迁移插件

Grails 数据库迁移插件问题

带有数据库迁移插件的 Grails 3:类 [com.mypackage.security.RequestMap] 上的方法在 Grails 应用程序之外使用

grails4中的数据库迁移插件错误

Grails 数据库迁移插件静默无法添加非空约束

Grails 数据库迁移插件 updateOnStart 不起作用