PostgreSQL-보기

뷰는 의사 테이블입니다. 즉, 실제 테이블이 아닙니다. 그럼에도 불구하고 SELECT에 일반 테이블로 나타납니다. 뷰는 일반 테이블에서 특정 열이나 특정 행을 선택하여 실제 테이블의 하위 집합을 나타낼 수 있습니다. 뷰는 조인 된 테이블을 나타낼 수도 있습니다. 뷰에는 별도의 권한이 할당되기 때문에 사용자가 테이블의 특정 행이나 열만 볼 수 있도록 테이블 액세스를 제한하는 데 사용할 수 있습니다.

뷰에는 테이블의 모든 행 또는 하나 이상의 테이블에서 선택한 행이 포함될 수 있습니다. 뷰를 생성하기 위해 작성된 PostgreSQL 쿼리에 의존하는 하나 이상의 테이블에서 뷰를 생성 할 수 있습니다.

일종의 가상 테이블 인 뷰를 통해 사용자는 다음을 수행 할 수 있습니다.

  • 사용자 또는 사용자 클래스가 자연 스럽거나 직관적 인 방식으로 데이터를 구조화합니다.

  • 사용자가 전체 테이블 대신 제한된 데이터 만 볼 수 있도록 데이터에 대한 액세스를 제한합니다.

  • 보고서를 생성하는 데 사용할 수있는 다양한 테이블의 데이터를 요약합니다.

뷰는 일반 테이블이 아니므로 뷰에서 DELETE, INSERT 또는 UPDATE 문을 실행하지 못할 수 있습니다. 그러나 뷰에서 DELETE, INSERT 또는 UPDATE를 사용하는이 문제를 해결하기 위해 RULE을 만들 수 있습니다.

보기 만들기

PostgreSQL 뷰는 CREATE VIEW성명서. PostgreSQL 뷰는 단일 테이블, 여러 테이블 또는 다른 뷰에서 생성 할 수 있습니다.

기본 CREATE VIEW 구문은 다음과 같습니다.

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

일반 PostgreSQL SELECT 쿼리에서 사용하는 것과 매우 유사한 방식으로 SELECT 문에 여러 테이블을 포함 할 수 있습니다. 선택적 TEMP 또는 TEMPORARY 키워드가있는 경우 임시 공간에보기가 작성됩니다. 임시보기는 현재 세션이 끝날 때 자동으로 삭제됩니다.

는 고려 회사 테이블에는 다음과 같은 기록을 가지고있다 -

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

이제 다음은 COMPANY 테이블에서 뷰를 생성하는 예제입니다. 이보기는 COMPANY 테이블의 열이 몇 개만있는 데 사용됩니다.

testdb=# CREATE VIEW COMPANY_VIEW AS
SELECT ID, NAME, AGE
FROM  COMPANY;

이제 실제 테이블을 쿼리하는 것과 유사한 방식으로 COMPANY_VIEW를 쿼리 할 수 ​​있습니다. 다음은 예입니다-

testdb=# 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 구문은 다음과 같습니다.

testdb=# DROP VIEW view_name;

다음 명령은 마지막 섹션에서 만든 COMPANY_VIEW 뷰를 삭제합니다.

testdb=# DROP VIEW COMPANY_VIEW;