gpt4 book ai didi

function - 如何从 pg_catalog.pg_proc 获取 Postgres 函数名称以及函数特定名称?

转载 作者:行者123 更新时间:2023-11-29 11:40:45 28 4
gpt4 key购买 nike

由于 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com