Warum exportiert postgresql pg_dump eine Ansicht als Tabelle?

10

Ich verwende das PostgreSQL 9.3- pg_dumpTool zum Extrahieren nur der öffentlichen Schemadefinition mit:

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

aber wenn ich überprüfe, erscheint schema.sqleine unserer Ansichten in einer CREATE TABLEAussage anstelle einer CREATE VIEWAussage.

Aber wenn ich pg_dumpdie spezifische Ansicht benutze mit:

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

schema.sqlenthält dann die eigentliche Ansichtsdefinition.

Warum passiert das? Danke Jungs!

Lben
quelle

Antworten:

12

Intern ist eine Ansicht nur eine Tabelle mit einer Regel, daher ist dies sinnvoll.

Siehe hier: https://postgresql.org/docs/9.5/static/rules-views.html

Ansichten in PostgreSQL werden mithilfe des Regelsystems implementiert. In der Tat gibt es im Wesentlichen keinen Unterschied zwischen:

CREATE VIEW myview AS SELECT * FROM mytab;

verglichen mit den beiden Befehlen:

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

denn genau das macht der CREATE VIEWBefehl intern. Dies hat einige Nebenwirkungen. Eine davon ist, dass die Informationen zu einer Ansicht in den PostgreSQL-Systemkatalogen genau die gleichen sind wie für eine Tabelle. Für den Parser gibt es also absolut keinen Unterschied zwischen einer Tabelle und einer Ansicht. Sie sind dasselbe: Beziehungen.

Max Murphy
quelle