স্থায়ীভাবে Postgresql স্কিমা পাথ সেট করুন


135

আমাকে পোস্টগ্র্রেসে স্কিমা পথ নির্ধারণ করা দরকার যাতে আমি প্রতিবার স্কিমা ডট টেবিল যেমন উল্লেখ না করি schema2.table। স্কিমা পাথ সেট করুন:

SET SCHEMA PATH a,b,c

কেবল ম্যাকের জন্য একটি কোয়েরি সেশনের জন্য কাজ করার জন্য মনে হয়, আমি ক্যোরি উইন্ডোটি বন্ধ করার পরে পাথ ভেরিয়েবলটি ডিফল্টতে ফিরে আসে।

আমি কীভাবে এটি স্থায়ী করতে পারি?


আমার মনে হয় SET অনুসন্ধান_পথ থেকে ক, খ, গ; যেমন উত্তরটি বলেছে এবং স্কেমা পাঠ ক, খ, গ সেট না করে;
আরমান্ডো

উত্তর:


168

(এবং যদি আপনার সার্ভারে কোনও প্রশাসক অ্যাক্সেস না থাকে)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

দুটি গুরুত্বপূর্ণ বিষয় সম্পর্কে জানতে:

  1. যখন স্কিমা নামটি সহজ না হয়, তখন এটি ডাবল উদ্ধৃতিতে আবৃত করা প্রয়োজন।
  2. আপনি যে অর্ডারে ডিফল্ট স্কিমা a, b, cবিষয়গুলি সেট করেছেন সেটিকেও একইভাবে যেমন স্কিমগুলি সারণীগুলির জন্য সন্ধান করা হবে is সুতরাং যদি আপনার ডিফল্টগুলির মধ্যে একাধিক স্কিমাতে একই টেবিলের নাম থাকে তবে কোনও দ্বিধা থাকবে না, সার্ভারটি আপনার জন্য নির্দিষ্ট করা প্রথম স্কিমা থেকে সর্বদা সারণীটি ব্যবহার করবে search_path

19
এ, বি, সি গণনার চারপাশে স্পষ্টভাবে উদ্ধৃতি ব্যবহার না করাও লক্ষণীয়। গত 15 মিনিটের হাত ধরে কপাল ...
Jmoney38

4
@ Jmoney38 একক উদ্ধৃতি ব্যবহার না করা, তবে সহজ-সরল স্কিমা নামের জন্য ডাবল-কোট প্রয়োজন।
প্রাণবন্ত-টি

136

আপনি search_pathডাটাবেস স্তরে ডিফল্ট সেট করতে পারেন :

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

অথবা ব্যবহারকারী বা ভূমিকা স্তরে:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

অথবা আপনার সমস্ত ডাটাবেসে আপনার যদি সাধারণ ডিফল্ট স্কিমা থাকে আপনি সার্চ_পথ বিকল্পের সাহায্যে কনফিগার ফাইলে সিস্টেম-ওয়াইড ডিফল্ট সেট করতে পারেন ।

একটি ডাটাবেস এটি একটি লুক্কায়িত "টেমপ্লেট" ডাটাবেসের নামে থেকে ডিফল্ট দ্বারা তৈরি করা হয় তৈরি করা হয় যখন template1 , আপনি ভবিষ্যতে তৈরি সব ডাটাবেস জন্য একটি নতুন ডিফল্ট সার্চ পাথ নির্দিষ্ট যে ডাটাবেসের পরিবর্তন পারে। আপনি অন্য একটি টেম্পলেট ডাটাবেস তৈরি করতে এবং CREATE DATABASE <database_name> TEMPLATE <template_name>আপনার ডাটাবেসগুলি তৈরি করতে ব্যবহার করতে পারেন।


9
পিএসকিএল কমান্ড লাইন থেকে যারা ভাবছেন তাদের জন্য আপনি
mas

3
সেটিংসটি কার্যকর হওয়ার জন্য সেশনটি সংযোগ বিচ্ছিন্ন করা এবং আবার সংযোগ স্থাপন করা দরকার।
ইস্পির

ওহ আপনাকে দোয়া করুন এসকিউএল সার্ভার থেকে পিজির কাছে এসেছিল তাই এটি আমার কাছে নতুন (এবং আশ্চর্যজনক)
নেট অ্যান্ডারসন

24

জোশ সঠিক তবে তিনি একটি ভিন্নতা রেখে গেছেন:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

একটি নির্দিষ্ট ডাটাবেসে ব্যবহারকারীর জন্য অনুসন্ধানের পথটি সেট করুন।


খুব দরকারী। ধন্যবাদ
আলেজান্দ্রো টিক্সির মুউজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.