如何使用 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
会使用 dropColumn
和 addColumn
创建变更集,而不是使用修改。也许列重命名/修改在路线图上。您可能可以编写自己的自定义变更集以在短期内迁移数据。
虽然插件仅在 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 3:类 [com.mypackage.security.RequestMap] 上的方法在 Grails 应用程序之外使用