আপনি কেবল কখনই সিস্টেম ক্যাটালগগুলি সরাসরি পরিচালনা করতে পারেন, যদি আপনি ঠিক কী জানেন তবে। এর অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া হতে পারে। অথবা আপনি মেরামতির বাইরে ডেটাবেস (বা পুরো ডাটাবেস ক্লাস্টার) কে দূষিত করতে পারেন।
জেরেমির উত্তর , মূলত কৌতুকটি করার সময়, সাধারণ মানুষের পক্ষে উপযুক্ত নয় । এটি নিঃশর্তভাবে একটি স্কিমে সমস্ত ফাংশন পরিবর্তন করে। আপনি কি নিশ্চিত যে কোনও মডিউল দ্বারা কোনও সিস্টেম ফাংশন প্রভাবিত বা ফাংশন ইনস্টল করা নেই?
ইতোমধ্যে মনোনীত মালিকের সাথে সম্পর্কিত ফাংশনগুলির মালিককে পরিবর্তন করাও অর্থহীন হবে।
প্রথমে REASSIGN OWNEDআপনার জন্য কাজ করতে পারে কিনা তা পরীক্ষা করুন :
একটি ডাটাবেস ভূমিকার মালিকানাধীন ডাটাবেস অবজেক্টের মালিকানা পরিবর্তন করুন
আপনাকে সমস্ত ভূমিকা পরিষ্কারভাবে অস্বীকার করতে হবে। তবে এটি ফাংশনগুলিকে পুনরায় নিযুক্ত করে ।
নতুন মালিককে প্রদত্ত স্কিমে সমস্ত ফাংশন (এবং অন্য কোনও অবজেক্টস) বরাদ্দ করতে (পূর্ববর্তী মালিক নির্বিশেষে)
SELECT string_agg('ALTER FUNCTION ' || oid::regprocedure || ' OWNER TO foo;', E'\n') AS ddl
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE n.nspname = 'public';
-- AND p.relowner <> (SELECT oid FROM pg_roles WHERE rolname = 'foo')
-- AND p.proname ~~ 'f_%'
এটি সমস্ত ফাংশন (নির্দিষ্ট স্কিমে) পরিবর্তন করার জন্য ক্যানোনিকাল এসকিউএল কমান্ডALTER FUNCTION ... উত্পন্ন করে । কমান্ডগুলি সম্পাদন করার আগে আপনি সেগুলি পরীক্ষা করতে পারেন - একবারে বা এক সাথে সমস্ত:
ALTER FUNCTION public.bar(text, text) OWNER TO foo;
ALTER FUNCTION public.foo(x integer) OWNER TO foo;
...
WHEREফলাফলগুলি ফিল্টার করতে আপনি মন্তব্য করতে পারেন এমন কয়েকটি মন্তব্যযুক্ত অন্তর্ভুক্ত করেছি ।
কাস্ট regprocedureপ্যারামিটার, ডাবল উদ্ধৃত যেখানে প্রয়োজন, স্কিমা সাথে একটি বৈধ ফাংশনের নাম উত্পাদন করে - যেখানে প্রয়োজনীয় বর্তমান যোগ্যতা search_path।
সামগ্রিক ফাংশন স্ট্রিং_এগজি () এর জন্য পোস্টগ্রিসকিউএল 9.0 বা তার পরে প্রয়োজন। পুরানো সংস্করণে বিকল্পের সাথে array_agg()এবং array_to_string()।
আপনি পারে একটি মধ্যে এই সব করা DOবিবৃতি বা এই সম্পর্কিত উত্তরে প্রদর্শিত মত একটি ফাংশন:
পোস্টগ্রেস 9.5 বা তারপরে , আপনি নতুন অবজেক্ট শনাক্তকারী প্রকারগুলি regnamespaceএবংregrole :
SELECT string_agg('ALTER FUNCTION '|| oid::regprocedure || ' OWNER TO foo;', E'\n') AS ddl
FROM pg_catalog.pg_proc
WHERE pronamespace = 'public'::regnamespace;
-- AND relowner <> 'foo'::regrole
-- AND proname ~~ 'f_%'
pg_proc.proisagg১১ পৃষ্ঠায় প্রতিস্থাপন করা হয়েছে। রিলিজ নোটগুলি বলে: সিস্টেম টেবিলের এবং (পিটার আইসেন্ট্রট)pg_procএর সাথে প্রতিস্থাপন করুন `proisaggproiswindowprokind