मैं ERROR: cached plan must not change result type
जावा / JDBC एप्लिकेशन के संदर्भ में समस्या को हल करने की कोशिश करते समय googling द्वारा यहां किसी के लिए भी इस उत्तर को जोड़ रहा हूं ।
मैं स्कीमा अपग्रेड (यानी DDL स्टेटमेंट) चलाकर त्रुटि को पुन: उत्पन्न करने में सक्षम था, जबकि डीबी का उपयोग करने वाला मेरा बैक-एंड ऐप था। यदि ऐप एक तालिका को क्वेरी कर रहा था जिसे स्कीमा अपग्रेड द्वारा बदल दिया गया था (यानी एक बदले हुए टेबल पर अपग्रेड से पहले और बाद में ऐप ने प्रश्नों को चलाया) - पोस्टग्रैज ड्राइवर इस त्रुटि को वापस करेगा क्योंकि स्पष्ट रूप से यह कुछ स्कीमा विवरणों का कैशिंग करता है।
आप अपने pgjdbc
ड्राइवर को कॉन्फ़िगर करके समस्या से बच सकते हैं autosave=conservative
। इस विकल्प के साथ, चालक जो भी विवरण दे रहा है उसे कैशिंग कर सकता है और आपको अपने सर्वर को उछालने या अपने कनेक्शन पूल को फ्लश करने या जो भी वर्कअराउंड आपके साथ आया हो सकता है।
पोस्टग्रैस 9.6 (AWS RDS) पर पुन: प्रस्तुत किया गया और मेरे प्रारंभिक परीक्षण से संकेत मिलता है कि समस्या पूरी तरह से इस विकल्प के साथ हल हो गई है।
प्रलेखन: https://jdbc.postgresql.org/documentation/head/connect.html#connection.parameters
आप pgjdbc
मुद्दे के अधिक विवरण और इतिहास के लिए जीथब मुद्दे को 451 पर देख सकते हैं ।
JRuby ActiveRecords उपयोगकर्ता इसे देखते हैं: https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql-connection_methods.rb#L60
प्रदर्शन पर ध्यान दें:
उपरोक्त लिंक में बताए गए प्रदर्शन के मुद्दों के अनुसार - आपको आँख बंद करके इसे बदलने से पहले अपने आवेदन का कुछ प्रदर्शन / लोड / सोख परीक्षण करना चाहिए।
AWS RDS Postgres 10
उदाहरण पर चल रहे मेरे अपने ऐप पर प्रदर्शन परीक्षण करने पर , conservative
सेटिंग सक्षम करने से डेटाबेस सर्वर पर अतिरिक्त CPU उपयोग होता है। हालांकि यह ज्यादा नहीं था, मैं केवल autosave
सीपीयू की एक औसत दर्जे की मात्रा का उपयोग करके कार्यक्षमता दिखा सकता था, क्योंकि मैं हर एक क्वेरी को लोड कर रहा था, जो मेरे लोड टेस्ट का उपयोग कर रही थी और लोड टेस्ट को जोर से धकेलना शुरू कर दिया।