PostgreSQL View(ビュー)

View(ビュー)は仮のテーブルであり、関連する名前でデータベースに保存された PostgreSQL ステートメントにすぎません。

View(ビュー)は実際には、事前定義された PostgreSQL クエリの形式で存在するテーブルの組み合わせです。

View(ビュー)は、1つのテーブルのすべての行、または1つ以上のテーブルから選択した行を含むことができます。

View(ビュー)は、作成するビューの PostgreSQL クエリに応じて、1つまたは複数のテーブルから作成できます。

View(ビュー)は仮想テーブルであり、ユーザーが次の点を実現できます:

  • ユーザーまたはユーザーグループにとって、構造化データを検索するための、より自然で直感的な方法。
  • データアクセスを制限し、ユーザーは完全なテーブルではなく限られたデータのみを表示できます。
  • レポート生成のために、さまざまなテーブルのデータを集約します。

PostgreSQL のビューは読み取り専用であるため、ビューに対して DELETE、INSERT、または UPDATE ステートメントを実行できない場合があります。ただし、ビュー上にトリガーを作成することができ、DELETE、INSERT、または UPDATE を試みたときにトリガーが発動し、実行する必要のあるアクションはトリガー内で定義されます。

CREATE VIEW(ビューの作成)

PostgreSQL では、CREATE VIEW ステートメントを使用してビューを作成します。ビューは、1つのテーブル、複数のテーブル、または他のビューから作成できます。

CREATE VIEW の基本構文は次のとおりです:

CREATE [TEMP | TEMPORARY] VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

SELECT ステートメントには複数のテーブルを含めることができます。これは通常の SQL SELECT クエリと非常によく似ています。オプションの TEMP または TEMPORARY キーワードを使用した場合は、一時データベースにビューが作成されます。

例

COMPANY テーブルを作成します(COMPANY SQL ファイルをダウンロード)。データ内容は次のとおりです:

サンプルdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

次に、COMPANY テーブルからビューを作成する例を示します。このビューは COMPANY テーブルから数列のみを選択します:

サンプルdb=# CREATE VIEW COMPANY_VIEW AS
SELECT ID, NAME, AGE
FROM  COMPANY;

これで、実際のテーブルをクエリするのと同様に COMPANY_VIEW をクエリできます。次に例を示します:

サンプルdb# SELECT * FROM COMPANY_VIEW;

結果は次のとおりです:

id | name  | age
----+-------+-----
  1 | Paul  |  32
  2 | Allen |  25
  3 | Teddy |  23
  4 | Mark  |  25
  5 | David |  27
  6 | Kim   |  22
  7 | James |  24
(7 rows)

DROP VIEW(ビューの削除)

ビューを削除するには、view_name を指定した DROP VIEW ステートメントを使用するだけです。DROP VIEW の基本構文は次のとおりです:

サンプルdb=# DROP VIEW view_name;

次のコマンドは、先ほど作成した COMPANY_VIEW ビューを削除します:

サンプルdb=# DROP VIEW COMPANY_VIEW;