マテリアライズドビューのリフレッシュ
PostgreSQL のマテリアライズドビューは、クエリ結果をテーブルとして保存したスナップショットであり、明示的に更新しない限り最新にならない。
通常のビューと違って自動では更新されず、REFRESH MATERIALIZED VIEW name を実行して初めて中身が入れ替わる。リアルタイムの正確さを要しない重い集計に向く。CONCURRENTLY を付けると更新中も SELECT でき、ブロックされない(ただし UNIQUE インデックスが必要で、更新自体は遅くなる)。定番の運用は、直近24時間分の集計を夜間の cron で更新するやり方である。
新しい版を作って原子的に差し替える仕組みのため、スキーマ変更には DROP と CREATE が要る。差分だけを反映する増分ビューメンテナンス(拡張機能 pg_ivm)という代替もあり、Snowflake や BigQuery のようなクラウド DWH では元テーブルの変化に応じた自動更新も使える。