grails - 如何导出新版本的域(数据库架构)的DDL以进行更新

标签 grails gorm database-migration

我已经使用Grails开发了一个应用程序,现在根据新要求,需要修改现有的domain classes以及添加新的类并更改/建立新的关系。

现在,新要求已经实现,我将部署到生产环境。但是,DBA希望脚本更改生产数据库DDL。在引导应用程序时,DBA不允许auto create / updatedatabase schema

我知道如何导出DDL来创建表。但是该脚本将删除表,这意味着所有数据都将丢失。
但是我不知道如何导出DDL以进行DDL更新(没有删除表/重新创建表)。有人有好的建议吗?

最佳答案

您不能期望现有数据会按照新的数据库架构原样存储。

例如,您有一个表Sample,其中contactNumber field在现有nullable : true中具有schema约束,而在new schema中,此约束已更改为nullable : trueunique : true
在这种情况下,数据库将无法保持现有数据完整或适应新的架构。

要保留现有数据,您可能必须经历一个乏味的过程,例如-

  • 备份现有数据库。
  • 记下您对现有Domain classes所做的修改。
  • 找出哪些修改可能导致失败/数据丢失。
  • 删除早期的database schema并部署新应用程序,然后让其创建database schema
  • 编写一个scriptutility,将根据新的数据库模式处理和存储database backup中的数据。确保您编写的utility具有处理对database schema进行的修改(约束,添加字段,删除字段)的能力。
  • 关于grails - 如何导出新版本的域(数据库架构)的DDL以进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39653664/

    相关文章:

    java - 对具有关系的对象实现save() Action ?

    mongodb - 在grails域mongodb中的映射中按键查找

    mongodb - 如何使用GORM/MongoDB插件在Grails中的域对象中创建一个上限集合

    c# - 相同的表名不同的模式

    Grails 服务使用另一个服务的方法

    grails - 数据库中缺少表

    forms - Grails表单选择选项

    oracle - 新的 Grails 域类未在数据库中创建表

    database - 数据迁移工具和模式迁移工具

    mysql - MSSQL 到 MYSQL 迁移 : Collation equivalent for SQL_LATIN1_GENERAL_CPI_CI_AS