postgresql - Consolidating views / Adding criteria on-top of existing view -
मेरे पास एक उच्च स्तर दृश्य स्कीमा में संग्रहीत है
schem1 उस ड्राइव यह कुछ तालिका से डेटा है जो मुखौटे अप्रासंगिक डेटा को बाहर निकालता है। अन्य कारणों के लिए अन्य पंक्तियों को मुखौटा बनाने के लिए आवेदन डेटा पर कई अलग-अलग मानदंडों को जारी करता है।
डेटा प्रोसेसिंग संग्रहीत कार्यविधियों के साथ किया जाता है मैं चाहूंगा कि इस एप्लिकेशन में जो कुछ भी फिल्टर जो चाहता है (या नहीं) वापस अस्थाई दृश्य को एक तरह से जारी करने की क्षमता रखता है जिस तरह से यह ऐप ऐड-अप फ़िल्टर चाहती है, जैसा कि वह चाहता है, दूसरे शब्दों में, मैं देख रहा हूं उस ड्राइव के साथ एक अस्थायी दृश्य को संग्रहीत करने के एक तरीके के लिए, यह पूर्ववर्ती अस्थायी दृश्य से डेटा है कि नया दृश्य उसे स्थान ले रहा है।
मैं जो हासिल करना चाहता हूं, उसके लिए वैकल्पिक स्पष्टीकरण, नए मानदंडों को संयोजित करने का एक तरीका है मौजूदा दृश्य के ऊपर, ताकि उस दृश्य के संदर्भ को गिराए जाने से 'आधार दृश्य + नए मानदंड' का प्रयोग किया जा सकेगा। जहाँ तक मैं बता सकता हूं, pgsql " संकलन " नहीं करता है देखें, लेकिन इसका इस्तेमाल एसक्यूएल पाठ के रूप में होता है, इसलिए एक ही
दृश्य को संदर्भित करना एक पुनरावर्ती कॉल माना जाता है (जब मैं वास्तव में जो करना चाहता हूँ वह "एफएमआर खंड में" पिछले परत दृश्य का संदर्भ है) ।
गतिशील फ़िल्टरिंग डेटा के लिए पोस्टग्रेज़ में दृश्य सर्वोत्तम उपकरण नहीं हैं I हर बार जब आप कोई नया फ़िल्टर परिभाषित करते हैं, तो नया दृश्य बनाना मुश्किल होता है (प्रदर्शन लागत का उल्लेख नहीं करता है)।
अपने अनुप्रयोगों में रिपोर्ट तैयार करने के लिए मैं वापस लौटने वाले फ़ंक्शन का उपयोग करता हूं इन कार्यों में फ़िल्टर मान तर्क के रूप में हैं आप उन्हें पैरामीट्रिज किए गए दृश्य के रूप में मान सकते हैं।
अपनी शर्तों को पूरा करने के लिए मैं निम्नलिखित समाधान का प्रस्ताव करता हूं बेशक, यह केवल एक रूपरेखा है।
मान लें कि ग्राहक आपके शीर्ष स्तर का दृश्य है और इसमें फ़ील्ड नाम है।
एक तालिका बनाएं जिसमें हम संख्याबद्ध फ़िल्टर संग्रहीत करेंगे:
तालिका फिल्टर बनाना (आईडी सीरियल प्राथमिक कुंजी, फिल्टर पाठ); नए फिल्टर को परिभाषित करने के लिए आप इसे तालिका में आसानी से सम्मिलित करते हैं:
फ़िल्टर (फ़िल्टर) मानों में डालें ('' जैसे नाम ''% John% '' ''); और फ़िल्टर से मानों द्वारा फ़िल्टर किए गए ग्राहक से डेटा उत्पन्न करने वाले फ़ंक्शन के रूप में हमारे पैरामीटिड व्यू को परिभाषित करें >:
फ़ंक्शन show_customers () बनाने या बदलने के लिए ग्राहकों की भाषा plpgsql को $$ घोषित _फिल्टर पाठ के रूप में सेट करता है; _query text = 'उन ग्राहकों से चुनें जहां सच है'; Id loop _query = _query || के द्वारा फिल्टर ऑर्डर से फिल्टर का चयन करें 'और (' '_फिलटर ||') '; अंत लूप; वापसी क्वेरी निष्पादित _query; अंत $ $; अब अगर आप उस फ़ंक्शन को कॉल करते हैं तो आप फिल्टर तालिका की वर्तमान स्थिति के आधार पर फ़िल्टर्ड डेटा प्राप्त करेंगे।
select * शो_customers () से; ध्यान दें कि आपके पास वर्तमान फ़िल्टर पर पूर्ण नियंत्रण है। आप उन्हें तालिका फिल्टर खाली करके रीसेट कर सकते हैं, आप एक या अधिक और बहुत कुछ निकाल सकते हैं।
Comments
Post a Comment