このサイトを参考にして、 Grails Database Migration Pluginに慣れようとしています。not null 制約を持つプロパティを追加しようとしたときに問題が発生しました。サイトに表示されているのと同じ方法でスクリプトをモデル化しました (列を追加し、既存のレコードの既定値を設定し、列に null 不可の制約を追加します)。
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}
addNotNullConstraint(tableName: "game", columnName: "genre")
}
}
データベースを更新しようとすると、黙って失敗します。そこで、問題を追跡するために、3 つの変更を 3 つの異なる groovy スクリプトに分割しました。
最初のファイル (列の追加) は正常に機能しました:
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
}
}
2 番目のファイル (既存のレコードに既定値を割り当てる) は正常に機能しました。
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "defaultValue") {
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}
}
}
3 番目のファイル (not null 制約の追加) はサイレントに失敗します。
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "notNull") {
addNotNullConstraint(tableName: "game", columnName: "genre")
}
}
ログ ファイルには、プラグインに関連するもののみが表示されます。
2012-06-28 10 :DATABASECHANGELOG
17 :11,694 [main] INFO liquibase - 変更ログ ロックの取得に成功main] INFO liquibase -DATABASECHANGELOG
2012-06-28 10:17:12,009 からの読み取り [main] INFO liquibase - 変更ログ ロックの解放に成功しました
databasechangelog テーブルを確認すると、スクリプトが実行されていないことがわかります。コンソールは私にこれを与えました:
| | データベース ルート @ jdbc:mysql://localhost/migration の dbm-update を開始しています
しかし、ありません
| | dbm-update の完了
成功した更新で見られるように。
注:私が参照として使用しているサイトはバージョン 1.0 を使用していることに注意することが重要かもしれません。私はバージョン 1.1 を使用しています。このプラグインのチュートリアルやサンプルを見つけるのに苦労しており、最新バージョン (1 か月前にリリース) の情報を見つけるのはさらに困難です。
not null 制約でどこが間違っているのか、誰でも特定できますか?