Grails 数据库迁移插件问题

Posted

技术标签:

【中文标题】Grails 数据库迁移插件问题【英文标题】:Grails Database Migration Plugin Issues 【发布时间】:2012-05-20 23:53:15 【问题描述】:

当我使用Grails Database Migration Plugin 并运行dbm-gorm-diff(例如,在安装 Spring Security Facebook 插件之后)时,我遇到了以下问题:

Error: Error executing SQL CREATE INDEX `FK609FD5A460CFCC39` ON `facebook_user`(`user_id`): Incorrect index name 'FK609FD5A460CFCC39'

看起来有问题的索引既是 FK 约束,又在生成的升级脚本中作为索引重用。如果我更改名称,从而删除重复项,一切正常。我正在使用mysql。我做错了吗?

谢谢。

【问题讨论】:

到目前为止,您使用插件成功了吗? @David 这对我来说还是很新的。我尝试了一些基本的升级,它们奏效了。 我只是在想,如果您的 DataSource.groovy 文件中有 dbcreate="..something..",它可能与插件冲突。但是,如果您已经进行了升级,那似乎不太可能。 有人设法解决了这个问题吗?我现在有完全相同的问题,我无法弄清楚发生了什么。 【参考方案1】:

我刚刚发现,如果我编辑 changelog.groovy 以将 addForeignConstraint 放在 createIndex 之后,它就像一个魅力。我猜是更改日志生成脚本中的另一个问题。

【讨论】:

奇怪,这个解决方案对我不起作用。我有多个addForeignConstraints 和多个createIndexs。更改密钥确实可以使其工作...不知道以后是否会产生任何不利影响。【参考方案2】:

我怀疑这实际上与 MySQL 有关,而不是与插件本身有关。看到这个错误:http://bugs.mysql.com/bug.php?id=55465

Sebastien 的回答是一种变通方法。

【讨论】:

【参考方案3】:

根据this question/answer,MYSQL 自动索引外键列。因此,当您添加外键约束时,您不需要同时定义索引。我使用 db 迁移插件,只删除 dbm-gorm-diff 生成的外键的“索引”条目。

我认为这比更改名称要好一些,因为这可能会在同一列上创建多个索引,这只是浪费资源。

【讨论】:

以上是关于Grails 数据库迁移插件问题的主要内容,如果未能解决你的问题,请参考以下文章

Grails 数据库迁移插件 updateOnStart 不起作用

grails4中的数据库迁移插件错误

Grails 3 数据库迁移插件初始化错误

Grails 2.3 数据库迁移上的“加载插件管理器时出错:TomcatGrailsPlugin”

已部署服务器上的 Grails 数据库迁移

Grails 数据库迁移插件静默无法添加非空约束