क्या यह संभव है? क्या मैं इसे कनेक्शन URL पर निर्दिष्ट कर सकता हूं? उसको कैसे करे?
क्या यह संभव है? क्या मैं इसे कनेक्शन URL पर निर्दिष्ट कर सकता हूं? उसको कैसे करे?
जवाबों:
मुझे पता है कि यह पहले से ही उत्तर दिया गया था, लेकिन मैं सिर्फ इसी मुद्दे पर भागा कि स्कीमा को लिबास कमांड लाइन के लिए उपयोग करने के लिए निर्दिष्ट करने की कोशिश की जा रही है।
अपडेट JDBC v 9.4 के अनुसार आप url को नए currentSchema पैरामीटर के साथ निर्दिष्ट कर सकते हैं जैसे:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
पहले वाले पैच पर आधारित है:
जो url की तरह प्रस्तावित है:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchemaअपना कनेक्शन बनाने के बाद JDCB पद्धति का उपयोग करने का प्रयास करें । हाल ही में पोस्टग्रेज ड्राइवर के साथ मेरे लिए काम करता है।
postgresql-9.4.1209.jdbc42.jarएक 9.5डेटाबेस और ?currentSchema=myschemaसिंटैक्स के साथ मिलकर काम किया ।
के रूप में संस्करण 9.4 , तो आप उपयोग कर सकते हैं currentSchemaअपने कनेक्शन स्ट्रिंग में पैरामीटर।
उदाहरण के लिए:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
यदि यह आपके वातावरण में संभव है, तो आप उपयोगकर्ता के डिफ़ॉल्ट स्कीमा को अपने इच्छित स्कीमा पर भी सेट कर सकते हैं:
ALTER USER user_name SET search_path to 'schema'
मुझे विश्वास नहीं है कि कनेक्शन स्ट्रिंग में स्कीमा को निर्दिष्ट करने का एक तरीका है। ऐसा प्रतीत होता है कि आपको निष्पादित करना है
set search_path to 'schema'
स्कीमा निर्दिष्ट करने के लिए कनेक्शन बनाने के बाद।
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
मैंने कुछ साल पहले इसे सक्षम करने के लिए PostgreSQL JDBC ड्राइवर के लिए एक पैच का अद्यतन संस्करण प्रस्तुत किया। आपको इसका उपयोग करने के लिए PostreSQL JDBC ड्राइवर को स्रोत से (पैच में जोड़ने के बाद) बनाना होगा:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
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 सार्वजनिक स्कीमा देखें । टोपी मैनुअल को उद्धृत करने के लिए:
पिछले अनुभागों में हमने बिना किसी स्कीमा नाम निर्दिष्ट किए तालिकाओं का निर्माण किया। डिफ़ॉल्ट रूप से ऐसी तालिकाओं (और अन्य वस्तुओं) को स्वचालित रूप से "सार्वजनिक" नाम के एक स्कीमा में डाल दिया जाता है। हर नए डेटाबेस में ऐसा स्कीमा होता है।
search_path
मत भूलो SET SCHEMA 'myschema'जो आप एक अलग बयान में उपयोग कर सकते हैं
SET SCHEMA 'मान' SET search_path TO मान के लिए एक उपनाम है। इस सिंटैक्स का उपयोग करके केवल एक स्कीमा निर्दिष्ट किया जा सकता है।
और जेडडीबीसी ड्राइवर पर 9.4 और संभवतः पहले के संस्करणों के बाद से, setSchema(String schemaName)विधि के लिए समर्थन है ।
"Sql.DB" के साथ जाएं ( search_pathअंडरस्कोर के साथ ध्यान दें ):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
यह पहले से ही उत्तर दिया गया था:
JDBC: PostgreSQL: // स्थानीय होस्ट: 5432 / mydatabase currentSchema = myschema
पिछले उत्तरों की तरह, उपरोक्त कनेक्शन स्ट्रिंग केवल काम करती है।
मैंने जाँच की है, और यह ठीक है: https://youtu.be/m0lBUHSLkNM?t=79
(हालांकि स्वीकृत जवाब 8 साल पहले दिया गया था, लेकिन इसे 1 साल पहले संपादित किया गया था।)