Tại sao postgresql pg_dump xuất một khung nhìn dưới dạng bảng?


10

Tôi đang sử dụng pg_dumpcông cụ PostgreQuery 9.3 để chỉ trích xuất định nghĩa lược đồ công cộng bằng cách sử dụng:

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

nhưng khi tôi kiểm tra schema.sqlmột trong những quan điểm của chúng tôi xuất hiện trong một CREATE TABLEtuyên bố thay vì một CREATE VIEWtuyên bố.

Nhưng, nếu tôi pg_dumpxem cụ thể bằng cách sử dụng:

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

sau đó schema.sqlchứa định nghĩa xem thực tế.

Vậy tại sao điều này xảy ra? Cảm ơn các bạn!

Câu trả lời:


12

Trong nội bộ, một khung nhìn chỉ là một bảng với một quy tắc, vì vậy điều này có ý nghĩa.

Xem tại đây: https://postgresql.org/docs/9.5/static/rules-view.html

Lượt xem trong PostgreSQL được triển khai bằng hệ thống quy tắc. Trong thực tế, về cơ bản không có sự khác biệt giữa:

CREATE VIEW myview AS SELECT * FROM mytab;

so với hai lệnh:

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

bởi vì đây là chính xác những gì CREATE VIEWlệnh thực hiện trong nội bộ. Điều này có một số tác dụng phụ. Một trong số đó là thông tin về một khung nhìn trong danh mục hệ thống PostgreSQL hoàn toàn giống với bảng. Vì vậy, đối với trình phân tích cú pháp, hoàn toàn không có sự khác biệt giữa bảng và dạng xem. Họ là cùng một điều: quan hệ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.