RailsでDB Viewを手軽に使う

Pocket

DB View、使いたいことありますよね。特にRailsから、使いたいことありますよね。ActiveRecordから透過的に使いたいですよね。

とはいえ

RailsにDB Viewを扱うための標準の機能はありません。schema_plusというDB Viewの定義をマイグレーションスクリプト内で書けるような仕組みはありますが、いかんせんちょっとした修正なのにDB Viewの中のSQLを毎回全部書かなきゃいけないのは面倒臭いです。

理想は、

みたいにソースコードの中で直接SQLを書けることですが、そういうGemを書こうとして挫折したので以下のような運用にしています。

普通にSQLファイルを用意する

lib/dbviews以下にDB Viewの定義を含んだ.sqlファイルを用意します。

そしてこんなRakeタスクを用意します。

これでrake dbview:reloadを叩くだけでlib/dbviews内のDB Viewを更新する仕組みが得られました。

あとは、

と、ActiveRecord::Baseを継承したクラスを作れば、通常のActiveRecordの仕組みからDB Viewを利用することができます。重かったらマテビューこと、マテリアライズド・ビューを使いましょうね。