0

我正在使用数据库迁移插件来控制我的数据库中的更改。我已按照本教程一步一步地应用于我的项目。一切似乎都很好,除了“dbm-gorm-diff”命令。

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

那是错的吗?我怎样才能让它按我的预期工作(我认为这是生成差异文件的正确方法)。你能帮我解决这个问题吗?太感谢了。

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

4

2 回答 2

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 ...')

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

于 2013-08-30T05:46:53.073 回答
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 。

于 2014-01-21T21:14:36.690 回答