0
0

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におけるビュー、マテリアライズドビューについて

Posted at

ビューとは?

一言で言うと、「仮想テーブル」です。
指定のSELECT文の結果を、あたかもテーブルかのように扱うことができる仕組みです。

ビューの利点

複雑なSELECT文を都度書かずに済みます。

ビューの欠点

処理速度が遅いことです。
ビューは実体としてのデータを持たないため、
上記クエリを実行するたびに、
ビューに定義されたSELECT文に置き換えられて実行されることになります。

ビューの作成構文

CREATE VIEW ビュー名 AS SELECT;

実際の例

下記のビューを作成してみるとします。

CREATE VIEW test_view AS 
SELECT t1.id, t1.name, t1.age, t2.address, t2.city, t3.job
FROM sample_table1 AS t1
JOIN sample_table2 AS t2 ON t1.id = t2.id
JOIN sample_table3 AS t3 ON t1.id = t3.id
WHERE t1.age < 25 AND t2.city = '東京';

これにより、「AS」以降に記載したSELECTをその都度書かなくても、下記の簡単なクエリで実行できるようになります。

select * from test_view;

なお、注意点として、ビューはREAD専用であり、ビューに対してINSERT、UPDATE、DELETEはできません。
また、ビューへの参照権限があれば、元のテーブルへの参照権限は不問です。

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

PostgreSQLにはマテリアライズドビューという仕組みもあります。略してマテビューと呼びます。
PostgreSQL 9.3から実装されました。

ビューはデータの実体を持たないのに対し、
マテリアライズドビューでは対象のデータをキャッシュし、実体として保持することが特徴です。

マテビューの利点

・複雑なSELECT文を都度書かずに済みます。
・データの実体を持つ分、ビューより処理が高速です。

マテドビューの欠点

・元のテーブルが変更された場合、マテリアライズドビューが保持する実体は古いままであり、手動で更新する必要があります。

マテビューの作成構文は下記です。

MATERIALIZEDと書く以外は、ビューの作成と同じです。

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

実際の例

下記のマテビューを作成してみるとします。

CREATE MATERIALIZED VIEW test_mate_view AS 
SELECT t1.id, t1.name, t1.age, t2.address, t2.city, t3.job
FROM sample_table1 AS t1
JOIN sample_table2 AS t2 ON t1.id = t2.id
JOIN sample_table3 AS t3 ON t1.id = t3.id
WHERE t1.age < 25 AND t2.city = '東京';

件数を出してみると、8件でした。

select count(*) from test_mate_view;

この8件のデータのうち、2件のレコードを削除し、再度実行しても、変わらず8件のままです。
テーブルの実体をマテビューに反映するには、以下のコマンドを実行する必要があります。

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

今回の場合は、

REFRESH MATERIALIZED VIEW test_mate_view;
select count(*) from test_mate_view;

を再度実行すると、6件取得されました。

マテビューの補足

PostgreSQLのマテリアライズドビューの更新(REFRESH MATERIALIZED VIEW)は、
完全リフレッシュといって、全てのレコードを更新し直す挙動になります。
OracleDBでは増分のみのリフレッシュを行うことも可能ですが、PostgreSQLでは未実装の機能であります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?