grails - grails database-migration-它可以为 'not null with default'生成吗?

标签 grails database-migration

在我看来,数据库更改的常见要求是增加了不能为null的列。解决某些情况下填充此列问题的一种方法是在DDL中将其定义为“默认不为null”。

Grails似乎没有在约束中直接支持'NNWD'。我测试了一个似乎可以等效的想法:

    String name = default
    ...
    name nullable:false

我想知道dbm-gorm-diff changleog-n.xml是否可以将其检测为默认值的null。但事实并非如此。那是1.2.2版本。我看到Liquibase通过其<addNotNullConstraint支持此功能。

有计划引入这种支持吗?关于如何解决此问题的任何建议,可能是通过使用dbm脚本的用户编写脚本。

问题:

我尝试使用1.3.2,但是在运行脚本时遇到MissingMethodException。实际的错误行是:

groovy.lang.MissingMethodException:方法的无签名:static grails.plugin.databasemigration.ScriptUtils.executeAndWrite()适用于参数类型:(java.lang.String,java.lang.Boolean,DbmGormDiff $ _run_closure1_closure2)值:[changelog -with-data.xml,false,DbmGormDiff $ _run_closure1_closure2 @ 2f673724]

我不明白,因为args似乎与插件代码中的executeAndWrite()方法的签名匹配。

问候,约翰

最佳答案

我对此主题进行了调查,发现解决方案更加复杂,并且尝试通过使用“默认情况下不为空”添加列来解决问题。当我计划使用Liquibase和Ant在测试,uat和实时环境中更新数据库时,我指的是在下面使用xml文件。

如果表中没有任何数据,则可以添加“不为空”的列。在我看来,对于实时数据库而言,这是不太可能的情况。

当表包含数据时,必须将新列定义为null。有3个步骤,需要手动更新插件生成的xml文件:

  • 将新的域属性定义为“nullable:true”,并生成diff xml文件。
  • 使用标记更新xml文件以添加新的变更集:

    update [table]设置[column] ='dflt value'其中[column]为空
  • 现在,您可以将新列定义为非空。可以使用更多的原始sql,或查找Liquibase的

  • 我认为确实不需要该列的默认值,因为Grails会确保null不会从浏览器中获取。我说这是因为我还没有找到一种方法来更改添加的列的定义,因此它具有默认值。

    约翰

    关于grails - grails database-migration-它可以为 'not null with default'生成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348705/

    相关文章:

    android - 如何在一个应用程序中处理 SQLiteOpenHelper 和 RoomDatabase?

    grails - 是什么导致 gsp 的 html 头中的脚本 block 被覆盖

    java - 使用 `where values in list`的Grails GORM 3.2.0查询

    mysql - 迁移 SQL 数据库、Capatiized 字段

    mysql - 与截断语句的标准定义混淆

    mysql - 我应该如何处理 clojure 项目的 sql 模式管理?

    javascript - grails gsp javascript集成,如何转义变量?

    java - Grails Spring Security 核心 - 自定义用户信息?

    rest - 通常在 ExtJS 应用程序上转义 HTML 的最佳方法是什么?

    postgresql - 以liquibase格式从数据库导出数据