2012-05-12 1 views
9

Когда я использую Grails Database Migration Plugin и запустить dbm-gorm-diff (например, после установки плагина Spring Security Facebook) Я получаю проблемы, как:Grails база данных миграция Проблема Plugin

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

Это выглядит как индекс в вопросе является как ограничение FK, а затем повторно используется как индекс позже в сгенерированном сценарии обновления. Если я меняю имя, удаляя дубликат, все работает нормально. Я использую Mysql. Я делаю что-то неправильно?

Спасибо.

+0

Вы успешно используете плагин до сих пор? – David

+0

@David Это все еще довольно новичок. Я попробовал несколько базовых обновлений, и они работали. – skaz

+0

Я просто думал, может быть, у вас есть 'dbcreate =" .. что-то .. "в вашем файле DataSource.groovy, это может противоречить плагину. Но если вы уже сделали апгрейды, которые, похоже, менее вероятны. – David

ответ

9

Я только что узнал, что если я изменю changelog.groovy, чтобы разместить addForeignConstraint после createIndex, он работает как шарм. Еще одна проблема в сценарии генерации изменений, я думаю.

+1

Странно, это решение не сработало для меня. У меня было несколько 'addForeignConstraint' и несколько' createIndex'. Изменение ключа позволило ему работать, хотя ... не знаю, будет ли это иметь какие-либо побочные эффекты позже. – Weezle

2

Я подозреваю, что это на самом деле связано с MySQL, а не с самим плагином. См. Эту ошибку: http://bugs.mysql.com/bug.php?id=55465

Ответ Себастьяна - это работа вокруг.

1

В соответствии с this question/answer MYSQL автоматически индексирует столбцы внешнего ключа. Поэтому, когда вы добавляете ограничение внешнего ключа, вам также не нужно определять индекс. Я использую плагин миграции db и просто удаляю записи 'index' для внешних ключей, которые генерирует dbm-gorm-diff.

Я думаю, что это немного лучше, чем изменение имени, поскольку это, вероятно, создает более одного индекса в одном столбце, который является просто пустой тратой ресурсов.

Смежные вопросы