Flywayでマイグレーション完了時に決められたSQLを実行する

スポンサーリンク

JavaのDBマイグレーションライブラリとしてFlywayを愛用していますが、マイグレーションが全て完了した後に、特定のSQLを流せないかなと調べてみたところ、Callbackという仕組みがあることがわかりました。

マイグレーションが全て成功した後だったり、1マイグレーション毎だったりと、いろいろなコールバックというかフック的なものが用意されています。

マイグレーションが全て完了した後だと、afterMigrateが使えるようです。afterMigrate.sqlを配置し、そこにマイグレーションが全て完了した後に流したいSQLを書けばOKです。

今回これを使いたいと思ったのは、PostgreSQLで参照しかできないユーザを用意したいと思ったところからでした。
PostgreSQLだと、下記のようなSQLでスキーマ内の全部のテーブルに対して権限を与えられます。(以下はpublicスキーマの全てのテーブルに対して、user2にSELECT権限を与えています)

GRANT SELECT ON ALL TABLES IN SCHEMA public To user2;

このSQLは、SQLを実行した時点で存在するテーブルに対してのみしか権限が付与されません。その後に追加されたテーブルがあった場合には、そのテーブルに対しても適宜権限を付与する必要がでてきます。

テーブル追加されるごとに行うのはかなり煩雑なので、afterMigrate.sqlにこのSQLを書いておけば、毎回全てのテーブルに対して権限を与えることができてとても便利そうです。

試したプロジェクトのリンクも張っておきます。