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

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

我想,我的问题与这个问题有点类似,但是这个问题是针对SQL Server 2005的:
表的存储过程列表

(可选)对于这个问题,你如何列出使用相同表格的触发器和约束条件?

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

如果您正在使用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在幕后运行的内容。

和@quassnoi和@davidwhthomas一样,只是我在里面添加了参数名:

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

如果列出函数的目的是清理它们,或者迭代一个带有不断变化的参数列表的新函数,则经常需要删除函数:

 DROP FUNCTION <name>(<args>); 

通过添加proargnames,我能够构build适用的function名称的下降。

另外,在评估function时,看到更完整的图像是很好的。

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

排除系统的东西:

 select proname from pg_proc where proowner <> 1; 

看看我的食谱 。 它读取函数和触发器。 它基于以下信息: 从PostgreSQL中提取META信息(INFORMATION_SCHEMA)

为了检索在ALTER中引用函数时所需的函数的参数types – 使用oldevectortypes对我来说工作得很好。

请参阅如何获取PostgreSQL中特定模式的数据库中存储的所有函数的列表?