উত্তর:
এতে এক্সটেনশানগুলি ইনস্টল করবেন না pg_catalog
(যদি না এটি তাদের ডিফল্ট হয়: তবে খুব কম এক্সটেনশানগুলি সেভাবে ডিজাইন করা হয়), কারণ আপনি কখনও সিস্টেম ক্যাটালগের সাথে জড়ান না । @ ক্রিস একটি কারণ প্রদর্শন করেছেন। অন্যরাও আছেন।
তবে "পাবলিক" স্কিমা কোনওভাবেই বিশেষ নয় । এটি কেবলমাত্র ডিফল্ট স্কিমা যা স্ট্যান্ডার্ড বিতরণে প্রাক ইনস্টলড যাতে আমরা এখনই শুরু করতে পারি। কিছু ডিবি প্রশাসকরা "পাবলিক" স্কিমাটি মোটেই ব্যবহার করেন না, কেউ কেউ এটিকে মুছেও দেয়।
CREATE EXTENSION
"পাবলিক" স্কিমার সাথে সম্পর্কিত নয়। অন্যথায় নির্দেশ না দেওয়া হলে এটি বর্তমান স্কিমাতে ইনস্টল হয় - কিছু এক্সটেনশানগুলির পূর্ব-সেট স্কিমা না থাকলে (যেমন পিজিকিউ / লন্ডিসট )। ডকুমেন্টেশন:
schema_name
এক্সটেনশনটির বিষয়বস্তুগুলি স্থানান্তরিত করার মঞ্জুরি দিয়ে এই স্কিমার নাম যাতে এক্সটেনশনের অবজেক্টগুলি ইনস্টল করতে হয়। নামযুক্ত স্কিমাটি ইতিমধ্যে বিদ্যমান থাকতে হবে। যদি নির্দিষ্ট না করা হয় এবং এক্সটেনশনের নিয়ন্ত্রণ ফাইলটি কোনও স্কিমা নির্দিষ্ট করে না তবে বর্তমান ডিফল্ট অবজেক্ট তৈরির স্কিমা ব্যবহার করা হয় ।
মনে রাখবেন যে এক্সটেনশানটি নিজেই কোনও স্কিমার মধ্যে বিবেচিত হয় না: এক্সটেনশনের অযোগ্য নাম রয়েছে যা অবশ্যই অনন্য ডাটাবেস-ওয়াইড হওয়া উচিত। তবে এক্সটেনশনের অন্তর্ভুক্ত অবজেক্টগুলি স্কিমার মধ্যে থাকতে পারে।
বোল্ড জোর আমার।
কীভাবে ব্যবহারকারী, স্কিমা এবং এটি পরিচালনা করবেন তা স্থির করুন search_path
:
তারপরে কোথায় এক্সটেনশন ইনস্টল করবেন তা স্থির করুন। আপনি আপনার পছন্দের যেকোন স্কিমাতে ইনস্টল করতে পারেন এবং search_path
সমস্ত ব্যবহারকারীর জন্য বা কেবলমাত্র কিছু বা কোনও ব্যবহারকারীর জন্যই ডিফল্টর মধ্যে সেই স্কিমা অন্তর্ভুক্ত করতে পারেন (যাতে যোগ্য রেফারেন্সগুলির প্রয়োজন হয়)। এটি সমস্ত কি আপনি অর্জন করতে চান তার উপর নির্ভর করে।
আপনি যাই করুন না কেন, ধারাবাহিক থাকুন।
আমি ডেডিকেটেড "এক্সটেনশানগুলি" স্কিমাতে এক্সটেনশানগুলি (এটির অনুমতি দেয়) ইনস্টল করতে চাই, যা আমি "সর্বজনীন" (এবং "ব্যবহারকারী" - এর search_path
পরে ডিফল্টে অন্তর্ভুক্ত করি - যদি আপনি এটি ব্যবহার করেন)। আমার নিজের পাবলিক ফাংশন এবং অন্যান্য পাবলিক অবজেক্টের পরিষ্কার বিচ্ছিন্নতাতে সহায়তা করে। আমার সেটিংস এতে postgresql.conf
:
search_path = "$user",public,extensions
বা:
search_path = public,extensions
এবং আমি এর সাথে এক্সটেনশানগুলি ইনস্টল করি:
CREATE EXTENSION some_extension SCHEMA extensions;
একটি বিষয় লক্ষণীয়: এইভাবে আপনি extensions
স্কিমাতে একই নামের (এবং পরামিতি) অবজেক্টগুলির পিছনে স্কিমায় বস্তুগুলিকে "আড়াল" (অযোগ্য) করতে পারেন public
।
সম্পর্কিত:
In PostgreSQL 9.0 and later, PL/pgSQL is installed by default. However it is still a loadable module, so especially security-conscious administrators could choose to remove it.
pg_catalog
। (আপনি যদি এটি পরিবর্তন করার চেষ্টা করেন তবে এটি একটি ত্রুটি ছুঁড়ে ফেলে)
এর মধ্যে এক্সটেনশানগুলি ইনস্টল করা pg_catalog
, যতদূর আমি সচেতন, পরামর্শ দেওয়া হয়নি। আপনার ডিফল্ট public
স্কিমা ব্যবহার করা উচিত , এটি search_path
ডিফল্টরূপেও।
উদাহরণ হিসাবে, আমি যে pageinspect
এক্সটেনশনটি ইতিমধ্যে public
স্কিমাটির মধ্যে তৈরি করেছি তা নিয়ে কাজ করব । সমস্ত ফাংশন, ডিফল্টরূপে, ডাটাবেজে সমস্ত স্কিমার অ্যাক্সেসযোগ্য যদি তারা স্কিমে অবস্থিত থাকে public
।
এখন, আমি এটি pg_catalog
ব্যবহার করে স্কিমাতে স্থানান্তরিত করার চেষ্টা করব
ALTER EXTENSION pageinspect SET SCHEMA pg_catalog;
এবং এটি ঠিক কাজ করে।
কিন্তু ...
এটি আবার public
ব্যবহার করে স্কিমায় ফিরে যাওয়ার চেষ্টা করুন
ALTER EXTENSION pageinspect SET SCHEMA public;
এবং এটি এটির অনুমতি দেয় না, নিম্নলিখিত ত্রুটিটি প্রদান করে
ERROR: cannot remove dependency on schema pg_catalog because it is a system object
SQL state: 0A000
আহ ওহ! ঠিক আছে, এটা ঠিক যে এটি আমাকে এড়াতে দেয় না। আমি এটিকে public
ফেলে রেখে পুনরায় তৈরি করে স্কিমায় ফিরে পেতে পারি , তাইনা? ...
DROP EXTENSION pageinspect;
CREATE EXTENSION pageinspect;
ঠিক আছে ভালো. এটি public
স্কিমাতে সঠিক জায়গায় ফিরে এসেছে এবং ফাংশনগুলি এখনও ডাটাবেসের সমস্ত স্কিমায় অ্যাক্সেসযোগ্য।
টি এল, ডিআর; public
এক্সটেনশনের জন্য কেবলমাত্র ডিফল্ট স্কিমা ব্যবহার করুন ।
plpgsql
এক্সটেনশন কি কোনওভাবে এই নিয়মের ব্যতিক্রম? প্রতিটি ইনস্টল আমি দেখেছি এর এক্সটেনশন pg_catolog