【Postgresql】マテリアライズドビュー

マテリアライズドビューとは

  • 実行結果をテーブルと同じようにキャッシュして、普通のビューならテーブル結合などのコストをかけて実行するものを既に計算済みのデータを読むだけの状態にする機能。
  • 実態はテーブルに似ていて、インデックスなどが張れる
  • 一度キャッシュしたら、REFLESH しないとデータが更新されない

マテビューを作る

CREATE MATERIALIZED VIEW mate_view AS
SELECT
  dept.dept_id, dept.dept_name, emp.emp_id, emp.emp_name
FROM
  dept
  INNER JOIN emp USING (dept_id)
;

マテビューをリフレッシュする

手動実行

www.postgresql.jp

-- 占有ロックあり
REFRESH MATERIALIZED VIEW mate_view;

-- 占有ロックなし、更新/参照されたら都度都度リフレッシュとまる
REFRESH MATERIALIZED VIEW CONCURRENTLY mate_view;

Oracleには自動更新するオプションはあるが、Postgresql10.x現在そういうのはないらしい。