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कमांड आंतरिक रूप से करता है। इसके कुछ दुष्प्रभाव हैं। उनमें से एक यह है कि पोस्टग्रेएसक्यूएल सिस्टम कैटलॉग में एक दृश्य के बारे में जानकारी बिल्कुल वैसी ही है जैसे यह एक तालिका के लिए है। तो पार्सर के लिए, तालिका और दृश्य के बीच कोई अंतर नहीं है। वे एक ही चीज हैं: संबंध।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.