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
には、実際のビュー定義が含まれています。
それで、なぜこれが起こっているのですか?君たちありがとう!
内部的には、ビューはルールを持つ単なるテーブルなので、これは理にかなっています。
ここを参照してください: 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システムカタログのビューに関する情報が、テーブルの場合とまったく同じであることです。したがって、パーサーにとって、テーブルとビューの間にまったく違いはありません。彼らは同じものです:関係。