【问题标题】:How do we migrate/update the database schema in Grails?我们如何迁移/更新 Grails 中的数据库模式?
【发布时间】:2011-01-31 20:02:23
【问题描述】:

我们使用 Grails 已经有一段时间了,我的团队负责人提出了一些关于 Grails ORM (GORM) 的问题:

  1. 一旦我们转移到生产环境,我们如何维护数据库架构?
  2. 我们可以使用 Grails 更新数据库架构吗?
  3. 如果架构已更新,是否会自动反映更改/框架是否会处理此问题?
  4. 是否有任何 Grails 插件可以让我们轻松更新架构?

【问题讨论】:

    标签: java orm grails groovy


    【解决方案1】:

    我最近发布了用于数据库迁移的官方 Grails 插件 - 请参阅 http://grails.org/plugin/database-migrationhttp://grails-plugins.github.com/grails-database-migration/docs/manual/index.html 上的文档

    我正在与 Liquibase 的作者合作,因此旧的 liquibase 插件现在已弃用,应该使用新的插件,因为它使用最新版本的 Liquibase (2.0) 并且由 SpringSource 正式支持。有关他的公告,请参见 http://blog.liquibase.org/2011/01/new-standard-liquibase-plugin-grails-database-migration.html

    在 Grails 用户邮件列表(从http://grails.org/Mailing+lists 注册)或http://grails-plugins.847840.n3.nabble.com/ 的新插件论坛上询问使用问题,或直接给作者发电子邮件:)

    【讨论】:

    • 新的DB插件绝对是最好的选择
    【解决方案2】:
    1. 为您的生产环境删除 DataSource.groovy 中的 dbCreate 参数 - 这将阻止 GORM 自动更新数据库架构。

    2. 当然。使用LiquiBase plugin

    3. GORM 可以使用dbCreate='update' 来实现,但强烈不推荐。例如,如果您重命名一个字段,GORM/LiquiBase 永远无法确定您必须迁移数据,而不仅仅是 drop+create。

    4. 在一行中:grails db-diff 生成 LiquiBase 的 changelog.xmlgrails migrate -Dgrails.env=<whatever environment> 将其应用于各自的数据库服务器。

    【讨论】:

      【解决方案3】:

      虽然“自动创建”功能可以让项目启动并运行,但我发现liquibase 是保持数据库最新的最佳方式。有一个grails plugin,我相信 DSL 的工作也在进行中。

      因此,创建一个基线模式(您可以使用 liquibase 的 generate-changelog),然后通过 liquibase 进行所有未来的更改,它将为您管理更新、回滚甚至一些数据库互操作。您可以将 DataSource.groovy 配置设置为验证,如果架构与域配置不匹配,grails 将不会启动:

      environments {
          development {
              dataSource {
                  dbCreate = "validate"
      

      您可能还对liquibase-runner plugin 感兴趣,以便在应用程序启动时运行您的迁移。

      【讨论】:

      • 我现在试用了 Burt 的 DB 插件,它好多了 - 使用它!
      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 2017-01-08
      • 2011-05-22
      • 1970-01-01
      • 2020-01-22
      • 2019-03-01
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多