3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PostgreSQLのビュー、マテリアライズドビューについて

Last updated at Posted at 2022-10-04

ビューとは

  • 複雑な処理を1つの処理にまとめる機能である
  • SELECT文を置き換えたもの。(つまり、SELECT ≒ ビュー)
  • 実体としてのデータを持たないため、仮想的なテーブルとも呼ばれる。
  • 実体としてのデータを持たない=ビューを実行するたびに、ビューに定義されたSELECT文を発行している。
  • ビューの中にビューを定義することもできるが処理が遅くなる。
  • メリット:
    • ビューを定義しておくことで毎回、複雑なSELECT文を書かなくて済む。
    • シンプルなSQL文を書くことができる。
    • 効率化、セキュリティ的にメリットがある。
  • デメリット:
    • 処理速度が遅い(データの実体を持たないため)

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

  • ビューと同じように、複雑なSQL文のSELECT結果を頻繁に取得する場合に使用する機能。
  • ビューは定義したSQL文で取得するデータを保持しない(データの実体がない)のに対し、マテリアライズドビューでは対象のデータをキャッシュし、実体として保持する。
  • マテリアライズドビューではデータの実体を保持するため、元のテーブルが変更された場合は、マテリアライズドビューが保持していいる実体が古くなっているため、マテリアライズドビュー自体も更新しなければいけない。
  • PostgreSQLではマテリアライズドビューの更新はREFRESH MATERIALIZED VIEWコマンドによって手動で行う(自動では行われない)
  • スナップショット。
  • メリット:
    • マテリアライズドビューに定義したSELECT文の結果を常に持つ(データの実体を持つ)ため、ビューに比べて高速。
  • デメリット:
    • データの実体を持つため、マテリアライズドビュー作成後から実体のデータが古くなってしまう可能性がある。
    • それに対応するように、最新のものに更新するコマンドがある。作成方法もビューと多少異なる。

両者の違い

  • SELECT文の置き換えで、SELECT結果を返すという役割は同じ
項目 ビュー マテリアライズドビュー
処理速度
データ保持 しない する
参照時の処理 SQLを発行し、結果を返す 保持しているデータを返す
主な利用目的 セキュリティ確保など パフォーマンス向上など

ビューの作成、変更、削除

作成

書式:CREATE VIEW ビュー名 AS SELECT文;

ビュー(VIEW_DBLIST)の作成
postgres=# CREATE VIEW VIEW_DBLIST AS
postgres-# SELECT oid, datname
postgres-# FROM
postgres-# pg_database
postgres-# ;

変更

  • ビューの変更方法は3通り
    • Create OR Replace VIEWコマンドを用いて変更する場合
    • ビューを削除して新たに作成する場合
    • ALTER VIEW

Create OR Replace VIEWコマンドを用いて変更する場合

  • Create OR Replace VIEWに指定したビューが無ければ新たに作成し、ビューがあれば変更する
ビュー(VIEW_DBLIST)の変更
postgres=# CREATE OR REPLACE VIEW VIEW_DBLIST AS
postgres-# SELECT *
postgres-# FROM pg_database
postgres-# WHERE oid > 0
postgres-# ;

削除

ビュー(VIEW_DBLIST)の削除
postgres=# DROP VIEW VIEW_DBLIST;

マテリアライズドビューの作成、変更、削除

作成

書式:CREATE MATERIALIZED VIEW マテリアライズドビュー名 AS SELECT文;

マテリアライズドビュー(VIEW_DBLIST)の作成
postgres=# CREATE MATERIALIZED VIEW mymatview AS 
postgres-# SELECT oid, datname
postgres-# FROM
postgres-# pg_database
postgres-# ;

変更

  • マテリアライズドビューの変更方法は2通り
    • ALTER MATERIALIZED VIEW
    • マテリアライズドビューを削除して新たに作成する場合

マテリアライズドビューのカラムを変更(ALTER MATERIALIZED VIEW)

  • マテリアライズドビューが所有するテーブルのカラム名を変更する
  • 以下の例では、マテリアライズドビューが所有するテーブルのnameカラムをzoo_nameカラムに名前を変更する
postgres=# ALTER MATERIALIZED VIEW ビュー名 RENAME name TO zoo_name;

更新(最新のテーブルに更新)

書式:REFRESH MATERIALIZED VIEW マテリアライズドビュー名;

  • REFRESH MATERIALIZED VIEWコマンドを用いて変更する場合(最新のテーブルに更新)
マテリアライズドビュー(VIEW_DBLIST)を最新に更新
postgres=# REFRESH MATERIALIZED VIEW VIEW VIEW_DBLIST;

削除

書式:DROP MATERIALIZED VIEW マテリアライズドビュー名;

マテリアライズドビュー(VIEW_DBLIST)の削除
postgres=# DROP MATERIALIZED VIEW VIEW_DBLIST;
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?