作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于 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;@
如何从 pg_catalog.pg_proc 正确加载函数和输入参数。借助information_schema.routines,有一种方法可以加载function 1)specific_name 2) routine_name
但是 information_schema.routines 中缺少许多其他属性,例如 1) isWindow 函数 2) isStrict 函数 3) isProRetSet 函数
那么还有其他方法可以从 pg_catalog 中获取函数 specific_name 吗......
最佳答案
一般方法是使用 psql -E
或在 psql 中设置 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;
它指导您如何获取与名称 "Func1"
关联的不同函数签名
与 \df+
相同会导致其他属性,如波动性。
关于function - 如何从 pg_catalog.pg_proc 获取 Postgres 函数名称以及函数特定名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18741164/
我是一名优秀的程序员,十分优秀!