2011-05-27 26 views
8

के लिए डिफ़ॉल्ट स्कीमा सेट करना मैं Play का उपयोग कर एक वेब एप्लिकेशन बना रहा हूं! वर्टिका डेटाबेस के साथ बैक एंड के रूप में। वर्टिका के लिए जेडीबीसी कनेक्शन स्ट्रिंग में सर्वर और डेटाबेस नाम होता है, लेकिन मेरी टेबल एक विशिष्ट स्कीमा के अंतर्गत होती है ("dev_myschema" कहें)। इस प्रकार, मुझे अपनी तालिका को "dev_myschema.mytable" के रूप में संदर्भित करना चाहिए। वास्तविक डेटा के साथ उत्पादन स्कीमा में इन सभी तालिकाओं की एक सटीक प्रति भी है ("prod_myschema" कहें)।वर्टिका डेटाबेस

मैं इस स्कीमा नाम को कॉन्फ़िगरेशन फ़ाइल में सेट करना चाहता हूं ताकि इन दो स्कीमा के बीच स्विच करना आसान हो। अभी के लिए, मेरे पास एक सहायक वर्ग में getConnection विधि है, जो DB.getConnection() करता है और कॉन्फ़िगर किए गए स्कीमा को उस कनेक्शन ऑब्जेक्ट के लिए डिफ़ॉल्ट स्कीमा के रूप में सेट करता है। हालांकि, यह अन्य मॉडल वर्गों में मदद नहीं करता है, जहां इसकी प्रविष्टि एनोटेशन (@Entity @Table (name = dev_myschema.mytable) के साथ उल्लेख किया गया है)

क्या कोई तरीका है जिसके द्वारा मैं स्कीमा नाम निर्दिष्ट कर सकता हूं कॉन्फ़िगरेशन फ़ाइल और इसे कनेक्शन विधि के साथ-साथ मॉडल एनोटेशन द्वारा पढ़ा गया है?

धन्यवाद।

+0

मैं जेपीए को वर्टिका के साथ काम करने की कोशिश कर रहा हूं। क्या आप अपनी दृढ़ता और डेटासॉर कॉन्फ़िगरेशन पोस्ट करेंगे? मैं इसे काम करने के लिए नहीं मिल सकता है। – Laures

+1

@Laures - मैं इसे प्ले फ्रेमवर्क के साथ उपयोग कर रहा हूं और कॉन्फ़िगर किया गया है कि इसे वर्टिका डेटाबेस पर पोस्टग्रेस बोलीभाषा पर विचार करें। एफडब्ल्यूआईडब्लू, यहां कॉन्फ़िगरेशन पैरामीटर _'jpa.dialect = org.hibernate.dialect.PostgreSQLDialect'_ – Ananth

+0

दो सप्ताह पहले काम करने वाले कस्टम बोली के साथ काम करने के लिए मिला है। hbm2ddl मेरे (पुराने) मॉडल के लिए काम नहीं करता है क्योंकि यह डेटाैटिप का उपयोग करता है, जहां वर्टिका द्वारा समर्थित नहीं है (intint से int4 डिफ़ॉल्ट है, वर्टिका int4 नहीं जानता ...)। अभी भी जवाब के लिए धन्यवाद। – Laures

उत्तर

1

जहां तक ​​मुझे पता है (और मैंने अभी 4.1.7 दस्तावेज स्कैन किया है), अभी तक स्कीमा को डिफ़ॉल्ट के रूप में सेट करने का कोई तरीका नहीं है।

0

एसक्यूएल गाइड के अनुसार डिफ़ॉल्ट स्कीमा आपके खोज पेड़ में पहला पाया गया है। हो सकता है कि आप इसका फायदा उठा सकें और सुनिश्चित करें कि आपकी प्रतिलिपि पहले पाई गई है।

0

यदि मैं अपनी विकास स्कीमा का उपयोग कर रहा हूं, तो मैं इस समस्या को संभालने का तरीका "सेट सर्च पथ" कमांड निष्पादित कर रहा हूं। तो, जैसे ही आपका वर्टिका कनेक्शन वस्तु बन जाता है, निम्न आदेश निष्पादित करें:

"set search path to dev_myschema" 

अपने आवेदन कोड में, मैं सिर्फ अपनी वर्टिका वस्तु एक वातावरण/config चर की जाँच की है, और "देव स्कीमा" सेटिंग है, तो मौजूद है, यह कनेक्शन स्थापित करने पर उस कथन को निष्पादित करता है। मेरी प्रोडक्शन कॉन्फ़िगरेशन में उस सेटिंग नहीं है, इसलिए यह उस मामले में डिफ़ॉल्ट स्कीमा का उपयोग करेगा और हर बार उस कथन को निष्पादित करने के अतिरिक्त ओवरहेड को नहीं लेगा।

6

यूजीन को यह लगभग सही मिला, लेकिन अंडरस्कोर गायब था। सही वर्टिका एसक्यूएल डिफ़ॉल्ट स्कीमा सेट करने के लिए वाक्य रचना है:

set search_path to dev_myschema 

के रूप में यूजीन सुझाव दिया, यदि आप निम्न स्तर JDBC का उपयोग कर रहे जैसे ही आप अपने कनेक्शन वस्तु बनाने आप कर सकते हैं:

conn.createStatement().executeUpdate("set search_path to " + schemaName); 
0

7.0 में, व्यवस्थापक इसे कमांड जारी करके उपयोगकर्ता स्तर पर सेट कर सकता है:

alter user user_name search_path schema1,schema2;