একটি সহজ কাজ আছে, oidvectortypes
এটি এটিকে অনেক সহজ করে তোলে makes
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';
লিও হু এবং রেগিনা ওবে পোস্টগ্রিস অনলাইন এ ক্রেডিট করার জন্য poinoidvectortypes
। আমি আগে অনুরূপ ফাংশন লিখেছি, কিন্তু জটিল নেস্টেড এক্সপ্রেশন ব্যবহার করেছি যা এই ফাংশনটির প্রয়োজনীয়তা থেকে মুক্তি পায়।
সম্পর্কিত উত্তর দেখুন ।
(২০১ 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
@ রুডজওয়ালিনস্কির উত্তর দেখুন।
ফাংশনের ওআইডি (দেখুন pg_catalog.pg_proc
) এবং ফাংশনের নির্দিষ্ট_নাম (দেখুন 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;