জেডিবিসির সাথে পোস্টগ্রিজের সাথে সংযোগ করার সময় কি স্কিমাটি নির্দিষ্ট করা সম্ভব?


উত্তর:


204

আমি জানি এটির ইতিমধ্যে উত্তর দেওয়া হয়েছিল, তবে আমি কেবল একই সমস্যাটিতে ছড়িয়ে পড়েছি যা তরলবেস কমান্ড লাইনের জন্য স্কিমাটি নির্দিষ্ট করার চেষ্টা করছে।

জেডিবিসি ভি 9.4 হিসাবে আপডেট করুন আপনি নতুন কারেন্টশেমা প্যারামিটারের মতো ইউআরএল নির্দিষ্ট করতে পারেন:

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। এইচটিএমএল

যা ইউআরএল এর মতো প্রস্তাবিত:

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

2
হ্যাঁ তবে লেখার মুহুর্তে (2012 সালের শেষের দিকে) এটি 9.1 ড্রাইভারের অংশ নয় , দেখুন: সংযোগ পরামিতি
ব্যবহারকারী272735

তুমি কি চেষ্টা করেছ? কারণ এটি পূর্ববর্তী ড্রাইভারের অংশ হিসাবে তালিকাভুক্ত ছিল না তবে এটি এখনও কাজ করে।
হিরো 2 কে

8
9.3-1101-jdbc41 এবং 9.1 দিয়ে চেষ্টা করা আমার জন্য কাজ করে না
Ignacio A. Poletti

@ IgnacioA.Poletti setSchemaআপনার সংযোগ তৈরির পরে জেডিসিবি পদ্ধতিটি ব্যবহার করার চেষ্টা করুন । সাম্প্রতিক পোস্টগ্রিস ড্রাইভারের সাথে আমার জন্য কাজ করে।
বেলডাজ

7
আমরা আলাদা (নতুন) জেডিবিসি ড্রাইভার ব্যবহার করেও এই সমস্যাটি সমাধান করেছি। আমাদের ক্ষেত্রে 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
সম্ভবত ডাটাবেস নিজেই বদল করা ভাল যাতে একই ব্যবহারকারী প্রয়োজনে বিভিন্ন অনুসন্ধান_পথের সাথে বিভিন্ন ডাটাবেসের সাথে সংযোগ স্থাপন করতে পারেন: ALT DATABASE dbname SET অনুসন্ধান_পাথ করতে সর্বজনীন, স্কিম্যানাম;
আলাস্কা

44

আমি বিশ্বাস করি না যে সংযোগ স্ট্রিংয়ে স্কিমা নির্দিষ্ট করার একটি উপায় আছে। এটি আপনাকে কার্যকর করতে হবে বলে মনে হচ্ছে

set search_path to 'schema'

স্কিমা নির্দিষ্ট করার জন্য সংযোগ তৈরি করার পরে।


2
এটি আমার পক্ষে কাজ করেছে, বিশেষত "সংযোগ" চালানোর জন্য উদাহরণটি ব্যবহার করে: Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
রোমারা

সংযোগের স্ট্রিংয়ে (jdbc uri) ডিফল্ট স্কিমা নির্দিষ্ট করার একটি উপায় রয়েছে। নীচে উত্তর দেখুন।
basilikode

7

আমি কয়েক বছর আগে এটি সক্ষম করতে পোস্টগ্র্রেএসকিউএল জেডিবিসি ড্রাইভারের কাছে প্যাচের একটি আপডেট সংস্করণ জমা দিয়েছি। এটি ব্যবহারের জন্য আপনাকে উত্স থেকে পোস্ট্রেএসকিউএল জেডিবিসি ড্রাইভারটি তৈরি করতে হবে (প্যাচ যুক্ত করার পরে) এটি ব্যবহার করতে:

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
9_19

3

SET SCHEMA 'myschema'আপনি কোন পৃথক বিবৃতিতে ব্যবহার করতে পারেন তা ভুলে যাবেন না

SET SCHEMA 'মান' SET অনুসন্ধান_পথ TO মানের একটি উপনাম। এই সিনট্যাক্সটি ব্যবহার করে শুধুমাত্র একটি স্কিমা নির্দিষ্ট করা যেতে পারে।

এবং 9.4 এবং সম্ভবত জেডিবিসি ড্রাইভারের পূর্ববর্তী সংস্করণগুলি থেকে, setSchema(String schemaName)পদ্ধতিটির জন্য সমর্থন রয়েছে ।



0

এটি ইতিমধ্যে উত্তর দেওয়া হয়েছিল:

JDBC: PostgreSQL: // স্থানীয় হোস্ট: 5432 / mydatabase currentSchema = myschema

পূর্ববর্তী উত্তরগুলির মতো, উপরের সংযোগের স্ট্রিংটি কেবল কাজ করে।

আমি পরীক্ষা করে দেখেছি এবং ঠিক আছে: https://youtu.be/m0lBUHSLkNM?t=79

(যদিও স্বীকৃত উত্তরটি 8 বছর আগে দেওয়া হয়েছিল, এটি 1 বছর আগে সম্পাদিত হয়েছিল।)


1
এটি কীভাবে 8 বছর আগে গৃহীত উত্তর থেকে আলাদা?
stdunbar

ঠিক আছে, মন্তব্যে এমন কিছু পোস্টও ছিল যা কিছু সন্দেহ প্রকাশ করেছিল যে এটি কার্যকর না পারে,। । সুতরাং আমি পরীক্ষা করেছি এবং ভিডিও হিসাবে আমার পরীক্ষা পোস্ট করেছি (আমি একজন নতুন সদস্য এবং আমি অন্যের জবাব সম্পর্কে এখনও মন্তব্য করতে পারি না)। - এছাড়াও, যদিও গৃহীত উত্তরটি 8 বছর আগে দেওয়া হয়েছিল, এটি 1 বছর আগে সম্পাদিত হয়েছিল। । ।
অ্যালেক্সস্যান্ডু 75
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.