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 之后,它就像一个魅力。我猜是更改日志生成脚本中的另一个问题。
【讨论】:
奇怪,这个解决方案对我不起作用。我有多个addForeignConstraint
s 和多个createIndex
s。更改密钥确实可以使其工作...不知道以后是否会产生任何不利影响。【参考方案2】:
我怀疑这实际上与 MySQL 有关,而不是与插件本身有关。看到这个错误:http://bugs.mysql.com/bug.php?id=55465
Sebastien 的回答是一种变通方法。
【讨论】:
【参考方案3】:根据this question/answer,MYSQL 自动索引外键列。因此,当您添加外键约束时,您不需要同时定义索引。我使用 db 迁移插件,只删除 dbm-gorm-diff 生成的外键的“索引”条目。
我认为这比更改名称要好一些,因为这可能会在同一列上创建多个索引,这只是浪费资源。
【讨论】:
以上是关于Grails 数据库迁移插件问题的主要内容,如果未能解决你的问题,请参考以下文章
Grails 数据库迁移插件 updateOnStart 不起作用