JDBC के साथ पोस्टग्रेज से कनेक्ट करते समय स्कीमा को निर्दिष्ट करना संभव है?


जवाबों:


204

मुझे पता है कि यह पहले से ही उत्तर दिया गया था, लेकिन मैं सिर्फ इसी मुद्दे पर भागा कि स्कीमा को लिबास कमांड लाइन के लिए उपयोग करने के लिए निर्दिष्ट करने की कोशिश की जा रही है।

अपडेट JDBC v 9.4 के अनुसार आप url को नए currentSchema पैरामीटर के साथ निर्दिष्ट कर सकते हैं जैसे:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema

पहले वाले पैच पर आधारित है:

http://web.archive.org/web/20141025044151/http://postgresql.1045698.n5.nabble.com/Patch-to-allow-setting-schema-search-path-in-the-connectionURL-td2174512। एचटीएमएल

जो url की तरह प्रस्तावित है:

jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema

2
हां, लेकिन लेखन के समय (2012 के अंत में) यह 9.1 चालक का हिस्सा नहीं है , देखें: कनेक्शन पैरामीटर
user272735

क्या तुमने कोशिश की? क्योंकि यह पिछले ड्राइवर के हिस्से के रूप में सूचीबद्ध नहीं था, लेकिन फिर भी यह काम कर रहा था।
Hiro2k

8
9.3-1101-jdbc41 और 9.1 के साथ कोशिश की, मेरे लिए काम नहीं करता है
इग्नासियो ए। पोलेट्टी

@ IgnacioA.Poletti setSchemaअपना कनेक्शन बनाने के बाद JDCB पद्धति का उपयोग करने का प्रयास करें । हाल ही में पोस्टग्रेज ड्राइवर के साथ मेरे लिए काम करता है।
बेलाज

7
हमने एक अलग (नए) JDBC ड्राइवर का उपयोग करके इस समस्या को हल किया। हमारे मामले में postgresql-9.4.1209.jdbc42.jarएक 9.5डेटाबेस और ?currentSchema=myschemaसिंटैक्स के साथ मिलकर काम किया ।
सेबेस्टियन

63

के रूप में संस्करण 9.4 , तो आप उपयोग कर सकते हैं currentSchemaअपने कनेक्शन स्ट्रिंग में पैरामीटर।

उदाहरण के लिए:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema

48

यदि यह आपके वातावरण में संभव है, तो आप उपयोगकर्ता के डिफ़ॉल्ट स्कीमा को अपने इच्छित स्कीमा पर भी सेट कर सकते हैं:

ALTER USER user_name SET search_path to 'schema'

1
संभवतः डेटाबेस को स्वयं बेहतर करने के लिए ताकि एक ही उपयोगकर्ता विभिन्न डेटाबेसों को अलग-अलग search_paths के साथ कनेक्ट कर सके, यदि आवश्यकता हो: ALTER DATABASE dbname SET search_path सार्वजनिक करने के लिए, योजनाबद्ध करें;
अलास्का

44

मुझे विश्वास नहीं है कि कनेक्शन स्ट्रिंग में स्कीमा को निर्दिष्ट करने का एक तरीका है। ऐसा प्रतीत होता है कि आपको निष्पादित करना है

set search_path to 'schema'

स्कीमा निर्दिष्ट करने के लिए कनेक्शन बनाने के बाद।


2
इसने मेरे लिए काम किया, विशेष रूप से चलाने के लिए "कनेक्शन" उदाहरण का उपयोग करते हुए: Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
romeara

कनेक्शन स्ट्रिंग (jdbc uri) में डिफ़ॉल्ट स्कीमा को निर्दिष्ट करने का एक तरीका है। नीचे उत्तर देखें।
तुलसीकोड

7

मैंने कुछ साल पहले इसे सक्षम करने के लिए PostgreSQL JDBC ड्राइवर के लिए एक पैच का अद्यतन संस्करण प्रस्तुत किया। आपको इसका उपयोग करने के लिए PostreSQL JDBC ड्राइवर को स्रोत से (पैच में जोड़ने के बाद) बनाना होगा:

http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php

http://jdbc.postgresql.org/


7

DataSource - setCurrentSchema

जब एक DataSourceकार्यान्वयन को तत्काल किया जाता है, तो वर्तमान / डिफ़ॉल्ट स्कीमा को सेट करने के लिए एक विधि की तलाश करें।

उदाहरण के लिए, PGSimpleDataSourceक्लास कॉल पर setCurrentSchema

org.postgresql.ds.PGSimpleDataSource dataSource = new org.postgresql.ds.PGSimpleDataSource ( );
dataSource.setServerName ( "localhost" );
dataSource.setDatabaseName ( "your_db_here_" );
dataSource.setPortNumber ( 5432 );
dataSource.setUser ( "postgres" );
dataSource.setPassword ( "your_password_here" );
dataSource.setCurrentSchema ( "your_schema_name_here_" );  // <----------

यदि आप स्कीमा को अनिर्दिष्ट छोड़ देते हैं, publicतो डेटाबेस के भीतर नामित स्कीमा के लिए डिफॉल्ट को पोस्टग्रेट करता है। मैनुअल, खंड 5.9.2 सार्वजनिक स्कीमा देखें । टोपी मैनुअल को उद्धृत करने के लिए:

पिछले अनुभागों में हमने बिना किसी स्कीमा नाम निर्दिष्ट किए तालिकाओं का निर्माण किया। डिफ़ॉल्ट रूप से ऐसी तालिकाओं (और अन्य वस्तुओं) को स्वचालित रूप से "सार्वजनिक" नाम के एक स्कीमा में डाल दिया जाता है। हर नए डेटाबेस में ऐसा स्कीमा होता है।


3
" एक स्कीमा से जुड़ने का प्रयास " - यह थोड़ा भ्रामक है। ड्राइवर "स्कीमा" से नहीं, बल्कि एक डेटाबेस से जुड़ता है । प्रश्नों द्वारा किस स्कीमा का उपयोग किया जाता है, यह वर्तमान सेटिंग पर निर्भर करता हैsearch_path
a_horse_with_no_name

3

मत भूलो SET SCHEMA 'myschema'जो आप एक अलग बयान में उपयोग कर सकते हैं

SET SCHEMA 'मान' SET search_path TO मान के लिए एक उपनाम है। इस सिंटैक्स का उपयोग करके केवल एक स्कीमा निर्दिष्ट किया जा सकता है।

और जेडडीबीसी ड्राइवर पर 9.4 और संभवतः पहले के संस्करणों के बाद से, setSchema(String schemaName)विधि के लिए समर्थन है ।


3

"Sql.DB" के साथ जाएं ( search_pathअंडरस्कोर के साथ ध्यान दें ):

postgres://user:password@host/dbname?sslmode=disable&search_path=schema

0

यह पहले से ही उत्तर दिया गया था:

JDBC: PostgreSQL: // स्थानीय होस्ट: 5432 / mydatabase currentSchema = myschema

पिछले उत्तरों की तरह, उपरोक्त कनेक्शन स्ट्रिंग केवल काम करती है।

मैंने जाँच की है, और यह ठीक है: https://youtu.be/m0lBUHSLkNM?t=79

(हालांकि स्वीकृत जवाब 8 साल पहले दिया गया था, लेकिन इसे 1 साल पहले संपादित किया गया था।)


1
यह 8 साल पहले के स्वीकृत जवाब से कैसे अलग है?
स्टडुनबार

खैर, टिप्पणियों में ऐसे पोस्ट भी थे जो कुछ संदेह पैदा कर रहे थे कि यह काम नहीं कर सकता है,। । इसलिए मैंने परीक्षण किया है और मैंने अपना परीक्षण एक वीडियो के रूप में पोस्ट किया है (मैं एक नया सदस्य हूं और मैं अन्य उत्तरों पर अभी तक टिप्पणी नहीं कर सकता)। - यह भी, हालांकि स्वीकृत जवाब 8 साल पहले दिया गया था, इसे 1 साल पहले संपादित किया गया था। । ।
अलेक्सांशु 20५
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.