প্রদত্ত ডাটাবেস এবং ব্যবহারকারীর জন্য অনুসন্ধান_পথটি কী?


43

আমি এর search_pathসাথে কারেন্টটি দেখতে পাচ্ছি :

show search_path ;

এবং আমি এটির সাথে বর্তমান সেশনেরsearch_path জন্য সেট করতে পারি :

set search_path = "$user", public, postgis;

পাশাপাশি, আমি স্থায়ীভাবে search_pathএকটি নির্দিষ্ট ডেটাবেসটির সাথে সেট করতে পারি :

alter database mydb set search_path = "$user", public, postgis ;

এবং আমি search_pathকোনও স্থায়ী ভূমিকা (ব্যবহারকারী) এর সাথে স্থায়ীভাবে সেট করতে পারি :

alter role johnny set search_path = "$user", public, postgis ;

তবে আমি জানতে চাইব যে কীভাবে এটি পরিবর্তন করতে পূর্বে ডাটাবেস এবং ভূমিকা সেটিংস (সম্মানের সাথে search_path) কী কী তা নির্ধারণ করবেন?

উত্তর:


36

আপনি ক্যাটালগ সারণিতে ভূমিকা এবং ডাটাবেসের জন্য কনফিগারেশন সেটিংস সন্ধান করতে পারেন pg_db_role_setting

এই ক্যোয়ারী প্রদত্ত ভূমিকা বা ডাটাবেসের জন্য কোনও সেটিংস পুনরুদ্ধার করে:

SELECT r.rolname, d.datname, rs.setconfig
FROM   pg_db_role_setting rs
LEFT   JOIN pg_roles      r ON r.oid = rs.setrole
LEFT   JOIN pg_database   d ON d.oid = rs.setdatabase
WHERE  r.rolname = 'myrole' OR d.datname = 'mydb';

যদি কিছু সেট না করা থাকে, পরবর্তী নীচের উদাহরণটি ডিফল্টরূপে অবস্থিত অবস্থাটি নির্ধারণ করে search_path, যা postgresql.confসার্ভার শুরুর ক্ষেত্রে এই ক্ষেত্রে বা কমান্ড-লাইন বিকল্পগুলির মধ্যে রয়েছে। সম্পর্কিত:

কোনও ভূমিকা বা ডাটাবেসের কোনও সেটিংস আনসেট করতে - এই বিশেষ উদাহরণে:search_path

ALTER ROLE myrole RESET search_path;

বা:

ALTER DATABASE mydb RESET search_path;

বা:

ALTER ROLE myrole in DATABASE mydb RESET search_path;

সিস্টেম ক্যাটালগ ( pg_catalog.*) কে ম্যানুয়ালি কখনই ডেটা ম্যানিপুলেট করবেন না । DDL কমান্ডগুলি ম্যানুয়ালটিতে নির্দেশিত হিসাবে ALTER ROLEএবং এর জন্য ব্যবহার করুন ALTER DATABASE
মূলত, RESETকমান্ডটি pg_db_role_settingপুনরায় বেস সেটিংটি কার্যকর হতে দেয় এমন একটি সারি মুছে দেয়। আমি যে কলম্বিত কল না।


কি দারুন. আমি কল্পনাও করিনি এটি এই সংঘাতযুক্ত হবে। আপনি কীভাবে কোনও প্রদত্ত ডাটাবেস এবং ভূমিকা সেটিংটি আনসেট করবেন ? মৃত্যুদন্ড কার্যকর করার পরে আমি লক্ষ্য করেছি যে (আমার ভূমিকা অনুসারে) মানটি পেয়েছে । এছাড়াও, এখন একটি অতিরিক্ত সারি দেখায়। কার্যকর করার পরে আমি একটি সারি দেখতে পাচ্ছি - শেষ পর্যন্ত, এই পরিবর্তনগুলি কীভাবে "পূর্বাবস্থায় ফেলা যায়" সম্পর্কে আমি নিশ্চিত নই। alter role myrole set search_path = "$user", public, postgis ;pg_roles.rolconfig{"search_path=\"$user\", public, postgis"}select * from pg_db_role_setting ;alter database mydb set search_path = "$user", public, postgis ;select * from pg_db_role_setting ;
ব্যবহারকারী 664833

@ ব্যবহারকারী 664833: আমি আনসেটটি না করার জন্য নির্দেশাবলী যুক্ত করেছি added
এরউইন ব্র্যান্ডসেটেটার

6

উভয় ডাটাবেস এবং ভূমিকাগুলির স্থায়ী সেটিংস pg_db_rol_settings সিস্টেমের ক্লাস্টার-ওয়াইড সারণীতে সংরক্ষণ করা হয়।

শুধুমাত্র পরিবর্তিত সেটিংস উপস্থিত রয়েছে। যদি কোনও ডেটাবেস বা কোনও ভূমিকার জন্য অনুসন্ধানের পথটি কখনই সংশোধন করা হয়নি, আমার ধারণা এটি এটি অনুমান করা যেতে পারে "$user",public

  • ক্লাস্টার স্তরের (গ্লোবাল কনফিগারেশনের মাধ্যমে postgresql.conf) সহ যে কোনও পরিবর্তনের পূর্বে সেটিংসের মানটি ডাটাবেস থেকে এটি জিজ্ঞাসা করা যেতে পারে:

     SELECT boot_val FROM pg_settings WHERE name='search_path';
  • সেশনের মধ্যে কোনও পরিবর্তনের পূর্বে সেটিংয়ের মান ( SETকমান্ডের মাধ্যমে ) এর সাথে ডাটাবেস থেকে অনুসন্ধান করা যেতে পারে:

     SELECT reset_val FROM pg_settings WHERE name='search_path';
  • এটিতে যখন কোনও অ-ডিফল্ট মান সেট করা থাকে postgresql.conf, বর্তমান অধিবেশনটির স্বাধীনভাবে এসকিউএল-তে এই মানটি পাওয়া সহজবোধ্য নয় । pg_settings.boot_valএটি কনফিগারেশন ফাইলের পরিবর্তনগুলিকে অগ্রাহ্য করে এবং তা pg_settings.reset_valকরবে না কারণ এটি সম্ভাব্যভাবে সেট করা ডাটাবেস / ব্যবহারকারীর সেটিংস দ্বারা প্রভাবিত হয়েছে ALTER USER/ALTER DATABASE। ডিবিএর মান পাওয়ার সহজতম উপায় হ'ল এটি সন্ধান করা postgresql.conf। অন্যথায়, বিশ্বব্যাপী অনুসন্ধান_পথটি রিসেট দেখুন , ক্লাস্টার ডিফল্ট যা এই বিষয়টিকে বিস্তারিতভাবে আচ্ছাদন করে।


boot_valআসলে কি সংকলিত কারখানাটি ডিফল্ট নয়, সেটিংসটি নেই postgresql.conf?
এরউইন ব্র্যান্ডসেটেটার

@ ইরভিন: হ্যাঁ এর reset_valপরিবর্তে কেউ দেখতে চাইবে boot_val
ড্যানিয়েল ভ্যারিট

হুম, ডাটাবেস বা ভূমিকা সেটিংস মানটি ওভাররাইট করে reset_val। আমি এই পুরানো প্রশ্নটি নিয়ে সাম্প্রতিককালে গবেষণা করতে গিয়ে হোঁচট খেয়েছি
এরউইন ব্র্যান্ডস্টেটার

@ আরউইন: আইএসটিএম যে পোস্টগ্রেএসএলএলএনএফ থেকে মান পাওয়া বেশিরভাগ ক্ষেত্রেই এক্সওয়াই সমস্যা হতে পারে। যাইহোক, আমি নতুন প্রশ্নের সাথে লিঙ্কটির উত্তর সম্পাদনা করেছি এবং কিছুটা প্রসারিত করব।
ড্যানিয়েল ভ্যারিট

3
select * from pg_user;

পোস্টগ্রিজ এবং রেডশিফ্টের জন্য সত্য। পূর্ববর্তী উত্তরের তুলনায় এটি খুব সহজ বলে মনে হচ্ছে যা নির্ভর করে pg_db_role_settingতবে useconfigকলামটিতে ব্যবহারকারী কনফিগারগুলির একটি তালিকা থাকবে search_path, তালিকা হিসাবে ফর্ম্যাট করা।

pg_user পোস্টগ্রিস ডকুমেন্টেশন এখানে

আরও নির্বাচনী হতে:

rs.db.batarang.com cooldb:cooldude =#> select usename
                                              , useconfig 
                                       from   pg_user
                                       where  usename = 'cooldude';
┌────────────┬─────────────────────────────────────────────────────┐
  usename                         useconfig                      
├────────────┼─────────────────────────────────────────────────────┤
 cooldude    {"search_path=dirt, test, \"$user\", public, prod"} 
└────────────┴─────────────────────────────────────────────────────┘

আমি মনে করি এই ব্যবহারকারীর টেবিলটিতে ক্লাস্টারের সমস্ত ব্যবহারকারী রয়েছে, কেবল নির্দিষ্ট ডিবি নয় - তবে আমি এটি যাচাই করি নি।


ভূমিকা ব্যবহারকারীর মতো হুবহু নয়। ;)
ভিস

ভিস আপনি কি বিস্তারিত বলতে পারেন? পোস্টগ্র্রেস ডকটি সামঞ্জস্যপূর্ণ এবং বলে মনে হয় যে ব্যবহারকারী এবং ভূমিকা আর স্বতন্ত্র ধারণা নয়, তবে আমি ডিবিএ নই এবং আরও ইনপুট পছন্দ করব। postgresql.org/docs/current/static/user-manag.html
মের্লিন

2
যে কোনও 'ভূমিকা' ব্যবহারকারী, একটি গোষ্ঠী বা উভয় হিসাবেই কাজ করতে পারে। তবে একজন ব্যবহারকারীকে অন্য একটি স্বতন্ত্রতা থাকতে বোঝানো হয়। ক্যাটালগটি পর্যালোচনা করে আমরা দেখতে পাই যে ভিউ pg_rol এবং pg_user উভয় রেফারেন্স টেবিল pg_authid, তবে ব্যবহারকারীর জন্য প্রিডিকেট রোলক্যানলজিন সহ। 'ব্যবহারকারীগণ' আপনার ডাটাবেসে লগইন করতে পারেন এবং ব্যবহারকারীদের উত্তরাধিকার সূত্রে অনুমোদিত 'ভূমিকা' নির্ধারণ করে ro
ভিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.