非常に奇妙な状況。現在の本番データベースであるルートchangelog.groovyがあります。また、latest-changelog.groovyもあります。これは、基本的にいくつかのマイナーなdiff修正を加えたdiffです(diffは完全ではないため)。
空のデータベースから開始すると、次のように機能します(シナリオ1)。
- mysqldump本番データベース
- 開発データベースへのソース
- latest-changelog.groovyのインクルードを削除します
- dbm-changelog-syncを実行します
- 最新のインクルードを追加-changelog.groovy
- dbm-updateを実行します
以下は機能しません(シナリオ2)。
- 開発データベースを削除する
- 空の開発データベースを作成する
- dbm-updateを実行します
何が起こるかというと、最初のchangelog.groovyは問題なく実行されます。しかし、latest-changelog.groovyに到達すると、次のように失敗します。
原因:java.sql.SQLException:'./main_dev/#sql-b4_2334'から'./main_dev/book_project_note'への名前変更時にエラーが発生しました(errno: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では失敗するのか疑問に思います。