読者です 読者をやめる 読者になる 読者になる

antを使ったDBのマイグレーション(2)

Java

Migrate4jやMIGRATEdbもあるけれど、改めて作った。
ant.jarを使ってTaskクラスをextendする形で。

●Migrate4jとの主な違い
・初期設定が不要。実行時にバージョンを管理するためのテーブル(Migrate4jでいうところのversionテーブル)が見つからなければ自動で作り(schema_infoテーブルとした)、初期データ'00000000000000'を登録する。
実はここで少しハマった。最初に無条件で'SELECT version FROM schema_info'のようなSQLを発行して、SQLExceptionが起こったら初期テーブルの作成と初期データ登録を行う、という風にしていたんだけど、SQLExceptionが起こった段階でトランザクションがアボートされてしまい、同じConnectionから取得したStatementでCREATE TABLE文がうまく実行できなかった。そのため再取得を行うようにして回避した(まぁ、あまり美しい方法ではないとは思うが)。

マイグレーションデータはJavaクラスではなく生のsqlファイル。結局学習コストが一番低いと思われるので(今回はPostgreSQLなのでpgadminから見えるクエリーを元に作っておけばよい)。
ついでにエラーが起これば、実行前の状態にロールバックされる。この辺はConnectionのオートコミットをfalseにして、原始的なやり方で書いている。というのも、なるべくほかのライブラリに依存したくないから(というつつ、Dbutilsだけは使った)