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を書いておけば、毎回全てのテーブルに対して権限を与えることができてとても便利そうです。
試したプロジェクトのリンクも張っておきます。