Grails数据库迁移插件中的奇怪行为

时间:2013-08-30 03:38:40

标签: grails grails-plugin database-migration

我正在使用数据库迁移插件来控制数据库中的更改。我已经按照本教程一步一步地申请了我的项目。一切似乎都没问题,除了" dbm-gorm-diff"命令。

首先,我使用" grails dbm-generate-gorm-changelog changelog.groovy"创建了我的数据库的快照。命令。然后我尝试修改一个表(称为Person表,再添加一个属性)并运行" dbm-gorm-diff"命令。但我收到的差异文件太大了。它绝对是我的数据库的新完整快照(包括新添加的列)!我希望该文件只显示DB与之前状态相比真正发生的变化。

那是错的吗?我怎样才能使它按预期工作(我认为这是生成diff文件的正确方法)。你能帮我解决一下吗? 非常感谢。

P / S:因为我在运行" dbm-gorm-diff"时遇到了一些错误。命令,所以我已应用此修复程序 https://github.com/ph4t/grails-database-migration/commit/68fff38397157740ee4d993c8bb67811a0f021bb
到数据库迁移插件。它工作正常,但给我一个奇怪的差异文件。

2 个答案:

答案 0 :(得分:0)

如果我是你,我会在更新人员课程后删除其他更改:

鉴于我的第一个changlog.grovvy存在,然后删除迁移脚本在您的person-update-changelog.groovy上写的所有其他内容。

并且

只保留那些说你的列修改。像

这样更新列大小是一件很奇怪的事
       varchar(20) to varchar(25) in database ,and 

       String Name

       name(maxlenght:25)  //this a change
可能无法为更新生成

。我简单地添加

        sql('Alter table column ...')

反映数据库的更改。删除那些您不理解的生成代码,并保持您所做的更改。

答案 1 :(得分:0)

如果我正确理解您的问题,我相信您可能会按顺序执行这些步骤。 dbm-generate-gorm-changelog将域对象与数据库进行比较,并创建初始更改日志。在不应用更改的情况下运行dbm-gorm-diff将导致与您所看到的更改日志基本相同。我相信你想要的生命周期是......

1)创建GORM对象。 2)运行dbm-generate-gorm-changelog 3)运行dbm-update以创建数据库模式对象

然后通过更改域对象来迭代。

1)修改GORM对象 2)运行dbm-gorm-diff [some file name] .xml -add 3)运行dbm-update 4)根据需要重复。

如果你真的没有开始使用空数据库,那么有不同的目标可以让你到达目的地,生命周期会有所不同。

有关详细信息,请参阅http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/index.html