列出引用 PostgreSQL 中表的存储函数

只是一个简单的快速问题: 在 PostgreSQL 中,如果可能的话,如何使用一个只使用 SELECT 语句的表来列出所有存储函数/存储过程的名称?如果简单的 SELECT 不够,我可以使用存储函数。

我认为,我的问题与另一个问题有些相似,但是另一个问题是针对 SQLServer2005的:
表中的存储过程列表

(可选)就此而言,如何列出以相同方式使用相同表的触发器和约束?

82922 次浏览

不包括系统方面的东西:

select proname from pg_proc where proowner <> 1;
SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public';

您可以使用标准的 information_schema模式来获取关于数据库的元数据(它是 SQL 标准的,因此它在不同的数据库系统中的工作方式应该是相同的)。在这种情况下,您需要 information_schema.routines

看看我的 食谱。它读取函数和触发器。它基于来自: 从 PostgreSQL 提取 META 信息(INFORATION _ SCHEMA)的信息

SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';

和@quassnoi 和@davidwhthoma 一样,只不过我在里面加了参数名:

SELECT  proname, proargnames, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';

如果列出这些函数的目的是清理它们,或者使用变化的 params 列表迭代一个新函数,那么您将经常需要删除函数:

DROP FUNCTION <name>(<args>);

通过添加 proargname,我能够为删除构造适用的函数名。

此外,在计算函数时,看到更完整的图片也很不错。

如果使用 psql,请尝试 \df

来自手册页:

Tip
To look up functions taking arguments or returning values of a specific type, use your pager's search capability to scroll through the \df output.

运行 \set ECHO_HIDDEN将揭示 \df在幕后运行的内容。

为了检索函数的 参数类型,这是在 改变中引用函数时所需的——使用 旧的检测器类型对我来说很有效。

参见 如何在 PostgreSQL 中获得存储在特定模式的数据库中的所有函数的列表?

请在下面的查询中更改 schema _ name 和 table _ name:

SELECT n.nspname AS schema_name
, p.proname AS function_name
, pg_get_function_arguments(p.oid) AS args
, pg_get_functiondef(p.oid) AS func_def
FROM   pg_proc p
JOIN   pg_namespace n ON n.oid = p.pronamespace
AND    n.nspname = 'schema_name'
AND    p.prosrc like '%table_name%'

因为表名是区分大小写的,所以需要定义确切的表名。