Rav*_*r S 3 postgresql function
由于Postgres支持函数重载,因此获取函数名称以及函数特定名称(没有重复的系统生成)更具意义.
假设我在名称中有2个函数作为Func1,它们被重载,如下所示,
CREATE FUNCTION "Schema"."Func1"(IN param1 INTEGER,
IN Param2 CHAR)
RETURNS INTEGER
AS $BODY$
begin
return param1+1;
end $BODY$
LANGUAGE PLPGSQL;@
CREATE FUNCTION "Schema"."Func1"(IN param1 INTEGER)
RETURNS INTEGER
AS $BODY$
begin
return param1+1;
end $BODY$
LANGUAGE PLPGSQL;@
Run Code Online (Sandbox Code Playgroud)
如何从pg_catalog.pg_proc正确加载函数和输入参数.在information_schema.routines的帮助下,有一种方法可以加载函数1)specific_name 2)routine_name
但是在information_schema.routines中缺少许多其他属性,如1)isWindow函数2)isStrict函数3)isProRetSet函数
那么是否有其他方法可以从pg_catalog获取函数specific_name .....
一般方法是在psql中使用psql -E
或设置ECHO_HIDDEN
,并查看它为反斜杠命令生成的查询.
例如,\df "Func1"
使用PostgreSQL 9.1产生这个:
SELECT n.nspname as "Schema",
p.proname as "Name",
pg_catalog.pg_get_function_result(p.oid) as "Result data type",
pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
CASE
WHEN p.proisagg THEN 'agg'
WHEN p.proiswindow THEN 'window'
WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
ELSE 'normal'
END as "Type"
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname ~ '^(Func1)$'
AND pg_catalog.pg_function_is_visible(p.oid)
ORDER BY 1, 2, 4;
Run Code Online (Sandbox Code Playgroud)
它为您提供有关如何获取与名称关联的不同功能签名的说明 "Func1"
同样\df+
会导致其他属性,如波动性.