उस उद्देश्य के लिए पोस्टग्रेज का एक समर्पित कार्य है। पोस्टग्रेज 8.4 के साथ पेश किया गया। मैनुअल:
<ब्लॉकक्वॉट>
pg_get_function_identity_arguments(func_oid)
... फ़ंक्शन की पहचान करने के लिए तर्क सूची प्राप्त करें (डिफ़ॉल्ट मानों के बिना) ...
pg_get_function_identity_arguments
किसी फ़ंक्शन की पहचान करने के लिए आवश्यक तर्क सूची देता है, जिस रूप में उसे ALTER FUNCTION
के भीतर प्रदर्शित होना होगा , उदाहरण के लिए। यह फ़ॉर्म डिफ़ॉल्ट मानों को छोड़ देता है।
उसका उपयोग करना (और format()
, पोस्टग्रेज 9.1 के साथ पेश किया गया, निम्नलिखित क्वेरी आपके खोज शब्दों से मेल खाने वाले कार्यों को छोड़ने के लिए डीडीएल स्टेटमेंट जेनरेट करती है:
SELECT format('DROP %s %I.%I(%s);'
, CASE WHEN p.proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END
, n.nspname
, p.proname
, pg_catalog.pg_get_function_identity_arguments(p.oid)
) AS stmt
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname = 'dblink' -- function name
-- AND n.nspname = 'public' -- schema name (optional)
-- AND pg_catalog.pg_function_is_visible(p.oid) -- function visible to user
ORDER BY 1;
सिस्टम कैटलॉग pg_proc
पोस्टग्रेज 11 . में बदला गया . proisagg
prokind
. द्वारा प्रतिस्थापित किया गया था , सच्ची संग्रहीत कार्यविधियाँ जोड़ी गईं। आपको अनुकूलन करने की आवश्यकता है। देखें:
- अपने सभी कार्यों को PostgreSQL में कैसे छोड़ें?
रिटर्न:
stmt
---------------------------------------------------
DROP FUNCTION public.dblink(text);
DROP FUNCTION public.dblink(text, boolean);
DROP FUNCTION public.dblink(text, text);
DROP FUNCTION public.dblink(text, text, boolean);
उदाहरण में चार मिलान मिले क्योंकि dblink अतिभारित कार्यों का उपयोग करता है।DROP
चलाएँ चुनिंदा बयान!
वैकल्पिक रूप से , आप वस्तु पहचानकर्ता प्रकार के लिए सुविधाजनक कास्ट का उपयोग कर सकते हैं regprocedure
जो तर्क प्रकारों सहित एक पूर्ण फ़ंक्शन हस्ताक्षर देता है:
-- SET LOCAL search_path = ''; -- optional, to get all names schema-qualified
SELECT format('DROP %s %s;'
, CASE WHEN proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END
, oid::regprocedure
) AS stmt
FROM pg_catalog.pg_proc
WHERE proname = 'dblink' -- function name
ORDER BY 1;