Pg_catolog স্কিমাতে এক্সটেনশনগুলি ইনস্টল করার পরামর্শ দেওয়া হচ্ছে?


11

যেহেতু pg_catalogস্কিমাতে থাকা বস্তুগুলি স্পষ্টভাবে search_path( ডকস ) এ রয়েছে, সুতরাং সেই স্কিমাতে এক্সটেনশনগুলি ইনস্টল করার পরামর্শ দেওয়া হবে?

উত্তর:


16

এতে এক্সটেনশানগুলি ইনস্টল করবেন না 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

সম্পর্কিত:


ঠিক আছে তবে plpgsqlএক্সটেনশন কি কোনওভাবে এই নিয়মের ব্যতিক্রম? প্রতিটি ইনস্টল আমি দেখেছি এর এক্সটেনশন pg_catolog
zam6ak

@ জ্যাম akাক: হ্যাঁ, পিএলপিএইচএসএলএল একটি বিশেষ কেস: ম্যানুয়ালটি উদ্ধৃত করে :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.
এরউইন ব্র্যান্ডসটেটার

1
plv8 নিজেকে এগুলি ইনস্টল করে pg_catalog। (আপনি যদি এটি পরিবর্তন করার চেষ্টা করেন তবে এটি একটি ত্রুটি ছুঁড়ে ফেলে)
jpmc26

6

এর মধ্যে এক্সটেনশানগুলি ইনস্টল করা 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এক্সটেনশনের জন্য কেবলমাত্র ডিফল্ট স্কিমা ব্যবহার করুন ।

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