Postgres में एक भौतिक दृश्य को बदलें


23

मेरे पास एक भौतिक दृष्टिकोण है Postgres 9.3जिसमें मैं नए कॉलम के साथ अपडेट करना चाहता हूं। हालाँकि, अन्य भौतिक विचार भी इस दृश्य पर निर्भर करते हैं, और त्रुटि संदेश इंगित करता है कि अन्य वस्तुओं पर निर्भर होने पर दृश्य को गिराना संभव नहीं है।

त्रुटि: भौतिक दृश्य को नवीनतम_चार्ज ड्रॉप नहीं कर सकती क्योंकि अन्य ऑब्जेक्ट इस पर निर्भर करते हैं

यह प्रलेखन से भी प्रतीत होता है कि REPLACE कीवर्ड भौतिक दृष्टि से मान्य नहीं है। क्या सभी आश्रित वस्तुओं को छोड़ने और हर एक के पुनर्निर्माण से अलग कोई शॉर्टकट है?


7
अफसोस की बात है, मुझे लगता है कि आप उन सभी को छोड़ने और पुनर्निर्माण के साथ फंस गए हैं।
क्रेग रिंगर

@CraigRinger इसे एक उत्तर के रूप में जोड़ने में रुचि रखता है?
dezso 12

जवाबों:


17

PostgreSQL 9.4 के रूप में: करने के लिए विभिन्न दृश्य बनाने के प्रलेखन , के प्रलेखन बनाएं materialized दृश्य का उल्लेख नहीं करता कीवर्ड बदलें। ऐसा लगता है कि सभी आश्रित वस्तुओं को छोड़ने और प्रत्येक के पुनर्निर्माण से अलग कोई शॉर्टकट नहीं है।

जब आप ऐसा करते हैं, तो मैं केवल दो छोटी चीजों की सिफारिश कर सकता हूं:

  1. सभी आश्रित वस्तुओं की सूची प्राप्त करने के लिए DROP MATERIALIZED VIEW blabla CASCADE का उपयोग करें
  2. एक लेन-देन में सभी आश्रित वस्तु की बूंद और मनोरंजन करें।

1
धन्यवाद, यह ठीक है कि मैं इसे कैसे कर रहा हूं। यह सिर्फ एक दर्द है जब मैं विश्लेषणात्मक उद्देश्यों के लिए एक आधार भौतिक दृष्टिकोण का निर्माण कर रहा हूं, जो कई अन्य दृश्यों में पुन: उपयोग होता है। वह आधार दृश्य शायद ही कभी बदलता है, लेकिन जो इस पर निर्भर होते हैं, वे रोज़ बदलते हैं।
जॉन

4

मेरी स्थिति के लिए, मैं एक दृश्य परत का उपयोग करके बूंदों को सीमित करना पसंद करता हूं:

  1. "_New" के साथ प्रत्यय वाले भौतिक दृश्य की एक प्रति बनाएँ और प्रदर्शन के लिए "NO DATA के साथ" का भी उपयोग करें, सुनिश्चित करें कि किसी भी इंडेक्स को प्रत्यय और DROP के माध्यम से खोजे गए किसी अन्य आश्रित ऑब्जेक्ट के साथ बनाया गया है ... CASCADE
  2. अमूर्त की परत प्रदान करने के लिए नए भौतिकीकृत दृश्य पर एक दृश्य बनाएं ताकि मुझे केवल इसे एक स्थान पर बदलने की आवश्यकता हो
  3. मौजूदा निर्भरता के बजाय नए दृश्य को संदर्भित करें (यदि पहले से आवश्यक हो तो डेटा को ताज़ा करना)
  4. मूल भौतिक दृष्टिकोण और सूचकांकों को छोड़ दें जिन पर अब कोई आश्रित नहीं होना चाहिए
  5. मूल नामों को पुनर्स्थापित करने के लिए प्रत्यय को गिराने के लिए भौतिकवादी दृश्य और संकेत

जैसे।

create table test (myfield int);
insert into test values (1);
create materialized view mv_test as select myfield from test;
create view v_test as select myfield from mv_test;
select * from v_test;
create materialized view mv_test_new as select myfield, myfield+1 as myfield2 from test;
alter view v_test rename to v_test_old;
alter materialized view mv_test rename to mv_test_old;
create view v_test as select myfield,myfield2 from mv_test_new;
select * from v_test;
alter materialized view mv_test_new rename to mv_test;
drop view v_test_old; -- when ready
drop materialized view mv_test_old; -- when ready

मैं उन अंतिम दो चरणों में स्पष्ट नहीं हूं। 4 एक वाक्य है जो 5 में चलता है? क्या आप कुछ नामित साक्षात्कारों और विचारों के साथ एक त्वरित उदाहरण दे सकते हैं?
kimbo305

काटे गए वाक्य को सही किया और उदाहरण दिया
RuiDC

1

PgAdmin (संस्करण 4.x) में, मैं आसानी से परिभाषा को संशोधित कर सकता हूं (मैंने एक जहां खंड जोड़ा है) गुण बॉक्स में। आपकी समस्या को इस तरह से हल किया जा सकता है।

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