如何在PostgreSQL中列出用户定义的函数和过程

14

我想查找PostgreSQL上存储的函数和过程。 我发现了一些使用“join”的解决方案。 我正在寻找一种最佳的解决方案 / 命令。

2个回答

21

如果有个我不知道的命令,我也会使用pg_catalog.pg_proc和pg_catalog.pg_namespace之间的联接解决方案来列出一个模式中的所有函数。

你可以通过调整联接来获得所需内容。 例如,此查询将为您提供更改模式上所有函数所有者的命令:

SELECT 'ALTER FUNCTION '
            || quote_ident(n.nspname) || '.' 
            || quote_ident(p.proname) || '(' 
            || pg_catalog.pg_get_function_identity_arguments(p.oid)
            || ') OWNER TO owner_usr;' AS command
FROM   pg_catalog.pg_proc p
JOIN   pg_catalog.pg_namespace n ON n.oid = p.pronamespace 
WHERE  n.nspname = 'your_schema';

这个应该列出所有你定义的用户函数:

SELECT   quote_ident(n.nspname) as schema , quote_ident(p.proname) as function 
FROM   pg_catalog.pg_proc p
JOIN   pg_catalog.pg_namespace n ON n.oid = p.pronamespace 
WHERE  n.nspname not like 'pg%'

希望能帮到你。

也许最后一行代码最好修改为:WHERE n.nspname not like 'pg\_%'(添加一个下划线)。虽然仍不完全安全,但已经更加安全了。 - Tim B.

19

您可以使用元命令获得函数

\df

1
有没有元命令可以转储函数的配置? 编辑:算了,您可以使用“\ sf [function_name]” - refriedjello
你可能需要提供数据库或模式来使其正常工作: \df <模式>,或 \df <模式>.,就像 \df my_db. - Mallory-Erik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接