Очень странная ситуация. У меня есть корневой файл changelog.groovy, который является текущей производственной базой данных. У меня также есть файл last-changelog.groovy, который в основном представляет собой diff с некоторыми незначительными исправлениями diff (потому что diff не идеален).
Начиная с пустой базы данных, работает следующее (Сценарий 1):
- производственная база данных mysqldump
- источник в базе данных разработчика
- удалить включение из last-changelog.groovy
- выполнить dbm-changelog-sync
- добавить включение last-changelog.groovy
- выполнить dbm-обновление
Следующее не работает (Сценарий 2):
- удалить базу данных разработчиков
- создать пустую базу данных разработчиков
- выполнить dbm-обновление
Что происходит, так это то, что начальный changelog.groovy работает без сучка и задоринки. Но когда он доходит до last-changelog.groovy, происходит сбой со следующим:
Вызвано: java.sql.SQLException: ошибка при переименовании «./main_dev/#sql-b4_2334» в «./main_dev/book_project_note» (ошибка: 150)
У меня есть таблица, определенная так:
mysql> desc book_project_note;
+---------------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+------------+------+-----+---------+-------+
| book_project_id | bigint(20) | NO | PRI | NULL | |
| note_id | bigint(20) | NO | PRI | NULL | |
| book_project_note_type_id | bigint(20) | NO | PRI | NULL | |
+---------------------------+------------+------+-----+---------+-------+
Следующий набор изменений не работает:
changeSet(author: "gdboling (generated)", id: "1341248060406-80") {
dropPrimaryKey(tableName: "book_project_note")
}
Здесь я пытаюсь удалить первичные ключи, а затем воссоздать 2 из них со следующим:
changeSet(author: "gdboling (generated)", id: "1341248060406-72") {
addPrimaryKey(columnNames: "book_project_id, note_id", constraintName: "book_project_PK", tableName: "book_project_note")
}
Мне интересно, почему это работает в сценарии 1, но не работает в сценарии 2.