关于PostgreSQL的视图和物化视图

视图是-

    • 複雑な処理を1つの処理にまとめる機能である

 

    • SELECT文を置き換えたもの。(つまり、SELECT ≒ ビュー)

 

    • 実体としてのデータを持たないため、仮想的なテーブルとも呼ばれる。

 

    • 実体としてのデータを持たない=ビューを実行するたびに、ビューに定義されたSELECT文を発行している。

 

    • ビューの中にビューを定義することもできるが処理が遅くなる。

 

    • メリット:

ビューを定義しておくことで毎回、複雑なSELECT文を書かなくて済む。
シンプルなSQL文を書くことができる。
効率化、セキュリティ的にメリットがある。

デメリット:

処理速度が遅い(データの実体を持たないため)

实体化视图是什么?

    • ビューと同じように、複雑なSQL文のSELECT結果を頻繁に取得する場合に使用する機能。

 

    • ビューは定義したSQL文で取得するデータを保持しない(データの実体がない)のに対し、マテリアライズドビューでは対象のデータをキャッシュし、実体として保持する。

 

    • マテリアライズドビューではデータの実体を保持するため、元のテーブルが変更された場合は、マテリアライズドビューが保持していいる実体が古くなっているため、マテリアライズドビュー自体も更新しなければいけない。

 

    • PostgreSQLではマテリアライズドビューの更新はREFRESH MATERIALIZED VIEWコマンドによって手動で行う(自動では行われない)。

 

    • スナップショット。

 

    • メリット:

マテリアライズドビューに定義したSELECT文の結果を常に持つ(データの実体を持つ)ため、ビューに比べて高速。

デメリット:

データの実体を持つため、マテリアライズドビュー作成後から実体のデータが古くなってしまう可能性がある。
それに対応するように、最新のものに更新するコマンドがある。作成方法もビューと多少異なる。

两者之间的区别

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

创建、修改、删除视图

创建

格式:创建视图 视图名称 作为 查询语句;

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に指定したビューが無ければ新たに作成し、ビューがあれば変更する

postgres=# CREATE OR REPLACE VIEW VIEW_DBLIST AS
postgres-# SELECT *
postgres-# FROM pg_database
postgres-# WHERE oid > 0
postgres-# ;

删除

postgres=# DROP VIEW VIEW_DBLIST;

创建、修改、删除实例化视图

创造

格式:CREATE MATERIALIZED VIEW <物化视图名称> AS <选择语句>;

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;

更新(刷新至最新的表格)

格式:刷新物化视图(MATERIALIZED VIEW)名称。

REFRESH MATERIALIZED VIEWコマンドを用いて変更する場合(最新のテーブルに更新)

postgres=# REFRESH MATERIALIZED VIEW VIEW VIEW_DBLIST;

删除

格式:删除物化视图 <物化视图名称>;

postgres=# DROP MATERIALIZED VIEW VIEW_DBLIST;
广告
将在 10 秒后关闭
bannerAds