Чому 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 точно така ж, як і для таблиці. Отже, для аналізатора абсолютно немає різниці між таблицею та поданням. Вони те саме: відносини.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.