2014-04-15 7 views
13

मैं अपने कोड में कई दृश्य बना रहा हूं और प्रत्येक बार कोड चलाए जाने पर, मैं अब तक उत्पन्न सभी भौतिक विचारों को छोड़ना चाहता हूं। क्या कोई ऐसा आदेश है जो पोस्टग्रेज़ के लिए सभी भौतिक दृश्यों को सूचीबद्ध करेगा या उन सभी को छोड़ देगा?क्या सभी भौतिक दृश्यों को सूचीबद्ध/ड्रॉप करने के लिए कोई पोस्टग्रेस कमांड है?

उत्तर

32

सभी दर्शाएं:

SELECT oid::regclass::text 
FROM pg_class 
WHERE relkind = 'm'; 

नाम, आपके वर्तमान search_path के अनुसार भाग निकले और स्कीमा योग्य रहे हैं, जहां regclass से text के कलाकारों में आवश्यक।

सिस्टम कैटलॉग pg_class में भौतिक दृश्य relkind = 'm' द्वारा पहचाने जाते हैं।

SELECT 'DROP MATERIALIZED VIEW ' || string_agg(oid::regclass::text, ', ') 
FROM pg_class 
WHERE relkind = 'm'; 

रिटर्न:

DROP MATERIALIZED VIEW mv1, some_schema_not_in_search_path.mv2, ... 

एक DROP MATERIALIZED VIEW बयान की देखभाल कर सकते हैं
Per documentation:

m = materialized view 

ड्रॉप सभी के लिए, आपको इस प्रश्न के साथ की जरूरत है SQL स्क्रिप्ट उत्पन्न कर सकते हैं एकाधिक भौतिक विचार। यदि आपके पास घोंसला वाले विचार हैं तो आपको अंत में CASCADE जोड़ने की आवश्यकता हो सकती है।

परिणामी डीडीएल स्क्रिप्ट को निष्पादित करने से पहले सुनिश्चित करने के लिए निरीक्षण करें। क्या आप वाकई सभी डीबी में सभी स्कीमा से एमवी छोड़ना चाहते हैं? (वर्तमान में कोई एक ताजा मानक स्थापना में देखा गया materialized कर रहे हैं।)

+0

मुमकिन है ऊपर एक टाइपो - मेरी पीजी में, 3 से ऊपर लिस्टिंग शुरू कर देना चाहिए: का चयन करें 'ड्रॉप materialized दृश्य' ... –

+0

@MichaelTerry: हाँ, मैं विचारों के विषय से दूर भटक गई थी। धन्यवाद, तय है। –

+0

बस एक साइड नोट के रूप में आप क्लाइंट क्लाइंट से अपने विचारों की एक सूची प्राप्त करने के लिए पीजी त्वरित कमांड \ dm का उपयोग कर सकते हैं। – lbrindze

0

आप प्रत्येक दृश्य के सामने ड्रॉप बयान के साथ एक पूरी सूची प्राप्त करना चाहते हैं, तो यह आसान होगा:

SELECT 'DROP MATERIALIZED VIEW ' || relname || ';' 
FROM pg_class 
WHERE relkind = 'm'; 
0

यह एक जवाब Erwin Brandstetter से उत्तर पर आधारित है। नीचे दिया गया संस्करण परिभाषित स्कीमा से भौतिक दृश्यों को पुनर्प्राप्त करने के लिए एक विशिष्ट स्कीमा नाम जोड़ता है। कास्काडे भी उस स्कीमा से भौतिक दृश्यों पर निर्भरता को छोड़ देता है। इसके साथ सावधान रहें।

SELECT 'DROP MATERIALIZED VIEW <<schema_name>>.' || c.relname::text || ' CASCADE;' AS drop_statements 
FROM pg_class c 
INNER JOIN pg_namespace n ON n.oid = c.relnamespace 
AND c.relkind = 'm' 
AND n.nspname = '<<schema_name>>' 
संबंधित मुद्दे

 संबंधित मुद्दे