Railsでマテリアライズドビューを使った

こんにちは kk8511 です。

マテリアライズドビューを使ったのでその備忘録です。

scenic gem を導入している前提です。

github.com

コマンドでファイルを生成する。

$ rails generate scenic:model materialized_view_samples --materialized
      invoke  active_record
      create    app/models/materialized_view_sample.rb
      invoke    rspec
      create      spec/models/materialized_view_sample_spec.rb
      create  db/views/materialized_view_samples_v01.sql
      create  db/migrate/20240905103904_create_materialized_view_samples.rb

手元の環境ではなぜか model にリフレッシュ用のメソッドが追加されなかったので手動で追加しました。

def self.refresh
  Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false)
end

db/views/materialized_view_samples_v01.sql にマテリアライズドビューのSELECT文を保存して マイグレーションを実行する。

$ rails db:migrate

以上。