web-dev-qa-db-ja.com

postgresql pg_dumpがビューをテーブルとしてエクスポートするのはなぜですか?

PostgreSQL 9.3を使用していますpg_dumpツールを使用して、パブリックスキーマ定義のみを抽出します。

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

でもチェックするとschema.sqlビューの1つがCREATE TABLEステートメントの代わりにCREATE VIEWステートメント。

しかし、私がpg_dump特定のビューを使用して:

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

次にschema.sqlには、実際のビュー定義が含まれています。

それで、なぜこれが起こっているのですか?君たちありがとう!

10
Lben

内部的には、ビューはルールを持つ単なるテーブルなので、これは理にかなっています。

ここを参照してください: https://postgresql.org/docs/9.5/static/rules-views.html

PostgreSQLのビューは、ルールシステムを使用して実装されます。実際、基本的に次のような違いはありません。

CREATE VIEW myview AS SELECT * FROM mytab;

2つのコマンドと比較:

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

これはまさにCREATE VIEWコマンドは内部的に行います。これにはいくつかの副作用があります。その1つは、PostgreSQLシステムカタログのビューに関する情報が、テーブルの場合とまったく同じであることです。したがって、パーサーにとって、テーブルとビューの間にまったく違いはありません。彼らは同じものです:関係。

12
Max Murphy