首先,我们删除了数据库,然后运行我们的应用程序dbCreate="update"
打造良好的工作基地。
然后我们跑:
grails dbm-generate-changelog baseline.xml
创建脚本来生成我们的架构。我们删除了dbCreate=xxx
来自DataSource.groovy
并在我们的中添加了以下内容Config.groovy
:
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
然后我们启动了我们的应用程序,它创建了数据库,这次是从 liquibase 开始的,我们认为一切都很好。
然后我们什么也没改变(没有改变源代码),并且做了:
grails dbm-gorm-diff should_be_empty.xml --add
令我们惊讶的是,这生成了 9 个额外的变更集,全部用于索引。
e.g:
<changeSet author="me(generated)" id="1438097433176-1">
<createIndex indexName="site_id_uniq_1438097432189" tableName="adobe_message_service_config" unique="true">
<column name="site_id"/>
</createIndex>
</changeSet>
<changeSet author="me(generated)" id="1438097433176-4">
<createIndex indexName="IX_note_player" tableName="note">
<column name="player_id"/>
</createIndex>
</changeSet>
很奇怪,这些变化是从哪里来的呢?因此,我们停止并再次启动应用程序,查看数据库更改日志表,发现所有 9 个新更改集都已运行。
所以我们第二次这样做,真的期望没有变更集:
grails dbm-gorm-diff should_be_empty_this_time.xml --add
现在它生成了 5 个更改集,所有索引再次出现,所有索引都是之前找到的 9 个更改集的重复项。查看数据库本身,已经存在一个名称、表和列完全相同的索引。所以数据库已经有了更改,现在相同的重复更改在更改集中两次,我们不知道为什么它出现在原始基线中dbm-generate-changelog
到底是怎么回事?