postgresql pg_dump가 뷰를 테이블로 내보내는 이유는 무엇입니까?


10

다음을 사용 pg_dump하여 공개 스키마 정의 만 추출하기 위해 PostgreSQL 9.3 도구를 사용하고 있습니다.

pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql

그러나 schema.sql우리의 견해 중 하나를 확인 하면 CREATE TABLE진술 대신 진술에 나타납니다 CREATE VIEW.

그러나 pg_dump특정보기를 사용하면 다음을 사용합니다.

pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql

그런 다음 schema.sql실제보기 정의 를 포함합니다.

왜 이런 일이 발생합니까? 감사합니다!

답변:


12

내부적으로 뷰는 규칙이있는 테이블 일 뿐이므로 의미가 있습니다.

여기를 참조하십시오 : https://postgresql.org/docs/9.5/static/rules-views.html

PostgreSQL의 뷰는 규칙 시스템을 사용하여 구현됩니다. 실제로 다음과 같은 차이점은 없습니다.

CREATE VIEW myview AS SELECT * FROM mytab;

두 명령과 비교 :

CREATE TABLE myview (same column list as mytab);
CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD
    SELECT * FROM mytab;

이것은 CREATE VIEW명령이 내부적으로 수행 하는 것과 정확히 일치하기 때문 입니다. 이것은 부작용이 있습니다. 그중 하나는 PostgreSQL 시스템 카탈로그의 뷰에 대한 정보가 테이블과 동일하다는 것입니다. 따라서 파서의 경우 테이블과 뷰 사이에는 아무런 차이가 없습니다. 그들은 같은 것입니다 : 관계.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.