एक आसान कार्य है oidvectortypes, जो इसे बहुत आसान बनाता है।
SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes))
FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid)
WHERE ns.nspname = 'my_namespace';
इंगित करने के लिए पोस्टग्रेज ऑनलाइन में लियो हूस और रेजिना ओबे को श्रेय oidvectortypes। मैंने पहले भी इसी तरह के कार्यों को लिखा था, लेकिन जटिल नेस्टेड अभिव्यक्तियों का उपयोग किया था जो इस फ़ंक्शन की आवश्यकता से छुटकारा दिलाता है।
संबंधित उत्तर देखें ।
(2016 में संपादित करें)
विशिष्ट रिपोर्ट विकल्पों को सारांशित करना:
-- Compact:
SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes))
-- With result data type:
SELECT format(
'%I.%I(%s)=%s',
ns.nspname, p.proname, oidvectortypes(p.proargtypes),
pg_get_function_result(p.oid)
)
-- With complete argument description:
SELECT format('%I.%I(%s)', ns.nspname, p.proname, pg_get_function_arguments(p.oid))
-- ... and mixing it.
-- All with the same FROM clause:
FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid)
WHERE ns.nspname = 'my_namespace';
सूचना : p.proname||'_'||p.oid AS specific_name अद्वितीय नाम प्राप्त करने के लिए उपयोग करें, या information_schemaतालिकाओं के साथ शामिल होने के लिए - देखें routinesऔर parameters@ RuddZwolinski के उत्तर पर।
फ़ंक्शन का OID (देखें pg_catalog.pg_proc) और फ़ंक्शन का specific_name (देखें information_schema.routines) फ़ंक्शन के लिए मुख्य संदर्भ विकल्प हैं। नीचे, रिपोर्टिंग और अन्य संदर्भों में कुछ उपयोगी कार्य।
--- --- --- --- ---
--- Useful overloads:
CREATE FUNCTION oidvectortypes(p_oid int) RETURNS text AS $$
SELECT oidvectortypes(proargtypes) FROM pg_proc WHERE oid=$1;
$$ LANGUAGE SQL IMMUTABLE;
CREATE FUNCTION oidvectortypes(p_specific_name text) RETURNS text AS $$
-- Extract OID from specific_name and use it in oidvectortypes(oid).
SELECT oidvectortypes(proargtypes)
FROM pg_proc WHERE oid=regexp_replace($1, '^.+?([^_]+)$', '\1')::int;
$$ LANGUAGE SQL IMMUTABLE;
CREATE FUNCTION pg_get_function_arguments(p_specific_name text) RETURNS text AS $$
-- Extract OID from specific_name and use it in pg_get_function_arguments.
SELECT pg_get_function_arguments(regexp_replace($1, '^.+?([^_]+)$', '\1')::int)
$$ LANGUAGE SQL IMMUTABLE;
--- --- --- --- ---
--- User customization:
CREATE FUNCTION pg_get_function_arguments2(p_specific_name text) RETURNS text AS $$
-- Example of "special layout" version.
SELECT trim(array_agg( op||'-'||dt )::text,'{}')
FROM (
SELECT data_type::text as dt, ordinal_position as op
FROM information_schema.parameters
WHERE specific_name = p_specific_name
ORDER BY ordinal_position
) t
$$ LANGUAGE SQL IMMUTABLE;