ทำไม 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 นั้นเหมือนกันทุกประการกับตาราง ดังนั้นสำหรับโปรแกรมแยกวิเคราะห์จึงไม่มีความแตกต่างระหว่างโต๊ะกับมุมมอง พวกเขาเป็นสิ่งเดียวกัน: ความสัมพันธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.