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


10

私は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、実際のビュー定義が含まれます。

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

回答:


12

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

こちらをご覧ください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システムカタログ内のビューに関する情報がテーブルの場合とまったく同じであることです。したがって、パーサーにとって、テーブルとビューの間にまったく違いはありません。彼らは同じことです:関係。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.