Grails 模式导出在生成 DDL 以为特定数据库创建数据库模式方面做得很好。但是我想做的是让 grails 只输出 DDL 以更新到已创建的模式,而不是从头开始创建它的 DDL。
我认为这应该是可能的,因为如果您dbCreate = "update"
在数据源中指定,grails 确实有能力实际更新模式。
但我只想让 grails 吐出它会运行的内容,而不是实际执行它,因此我可以通过 SQL 工具以受控方式自己执行它。
Grails 模式导出在生成 DDL 以为特定数据库创建数据库模式方面做得很好。但是我想做的是让 grails 只输出 DDL 以更新到已创建的模式,而不是从头开始创建它的 DDL。
我认为这应该是可能的,因为如果您dbCreate = "update"
在数据源中指定,grails 确实有能力实际更新模式。
但我只想让 grails 吐出它会运行的内容,而不是实际执行它,因此我可以通过 SQL 工具以受控方式自己执行它。
正如@GreyBeardedGeek 在评论中指出的那样,数据库迁移插件(现在默认包含)可以生成您正在寻找的“模式差异”,并且它比原版dbCreate = "update"
所做的要多得多,因为 Grails 的本机数据库更新只依赖于 Hibernate 提供的东西,它可以做的更新非常保守。
特别是,您正在寻找的数据库迁移插件的一部分是dbm-update-sql
脚本,它将为您提供它将运行以将数据库更新到当前模式版本的 SQL。
一般来说,我强烈建议使用数据库迁移插件之类的工具,因为它将您的数据库模式与您的应用程序代码捆绑在一起,您可以轻松地将它们一起版本化,并且它还包含许多工具,因此运行更新要少得多痛苦,并允许回滚和自定义脚本根据需要按摩事物。