PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

jOOQ में डायनामिक रनटाइम PostgreSQL स्कीमा चयन

ऐसा प्रतीत होता है कि कुछ समय के लिए, search_path सेट करना jOOQ के दायरे से बाहर है। सिद्धांत रूप में, हम फ्लाईवे में जावा माइग्रेशन का उपयोग कर सकते हैं और फ़ंक्शन के भीतर सभी संदर्भों को स्पष्ट स्कीमा रखने के लिए मजबूर कर सकते हैं, लेकिन यह बहुत दर्दनाक लगता है। जो हमें या तो खोज पथ को मैन्युअल रूप से सेट करने, संभावित रूप से इसे हमारे लेनदेन प्रबंधन में जोड़ने, या एक बेहतर कनेक्शन प्रदाता लिखने के साथ छोड़ देता है।

हमारे पास हमारे आवेदन पर एक बहुत सख्त एक-क्वेरी-प्रति-लेनदेन मॉडल है, इसलिए "सेट search_path =..." क्वेरी को जोड़ने के लिए वास्तव में कोई लेनदेन प्रबंधन नहीं है। कनेक्शन प्रदाता समाधान हमारा सबसे अच्छा विकल्प प्रतीत होता है।

कनेक्शन पूलिंग के लिए हमारे पास पहले से ही एक कस्टम कनेक्शन प्रदाता कार्यान्वयन है, इसलिए search_path को सेट करने के लिए तर्क (प्रश्न के अंत में ऊपर दिया गया) में जोड़ने में कोई परेशानी नहीं थी। हम कनेक्शन को किसी ऐसी चीज़ से सजाकर इसे और अधिक प्रदर्शनकारी बना सकते हैं जो याद रखती है कि उसका वर्तमान search_path किस पर सेट है, और "set search_path =...;" उपसर्ग करना। जरूरत पड़ने पर दरवाजे से बाहर जाने से पहले किसी भी बयान के सामने। हम पहले से ही प्रत्येक अनुरोध search_path को सेट करने के लिए एक प्रदर्शन प्रभाव देख रहे हैं, इसलिए यह एक आवश्यकता बनने से पहले की बात है। खैर, वह या हमारे पुराने मालिकाना डेटाबेस एक्सेस लेयर के दर्द पर वापस जा रहा है।

कम से कम, मैं इसे तब तक उत्तर के रूप में स्वीकार नहीं करूंगा जब तक कि मैं कनेक्शन पूलिंग/search_path सेटिंग कनेक्शनप्रोवाइडर को लिखता और खोलता हूं, इस उम्मीद में कि कोई और इससे पहले कि मैं इसके आसपास हो, बेहतर समाधान के साथ आएगा।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक चयन में डुप्लिकेट बाद के रिकॉर्ड को फ़िल्टर करना

  2. JDBC ड्राइवर वर्ग 'com.postgresql.jdbc.Driver' लोड नहीं कर सकता

  3. Django को SQLite से PostgreSQL में कनवर्ट करना

  4. पोस्टग्रेस्क्ल सरणी को पंक्तियों में खोलना

  5. पोस्टग्रेज के लिए कोई DELETE CASCADE कैसे लिखता है?