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

Pao*_* B. 70 sql postgresql metaprogramming

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

我认为,我的问题与其他问题有些类似,但另一个问题是针对SQL Server 2005:
表中的存储过程列表

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

Qua*_*noi 97

SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public';
Run Code Online (Sandbox Code Playgroud)


小智 17

SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';
Run Code Online (Sandbox Code Playgroud)

  • 也许下次只需编辑自己的帖子而不是改变一件小事 (3认同)

day*_*r4b 13

如果您使用的是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.
Run Code Online (Sandbox Code Playgroud)

跑步\set ECHO_HIDDEN将揭示\df幕后运行的内容.


Mat*_*sel 9

和@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';
Run Code Online (Sandbox Code Playgroud)

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

DROP FUNCTION <name>(<args>);
Run Code Online (Sandbox Code Playgroud)

通过添加proargnames,我能够构建drop的适用函数名称.

此外,在评估功能时,可以看到更完整的图片.


Luk*_*ský 5

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


win*_*nas 4

排除系统的东西:

select proname from pg_proc where proowner <> 1;
Run Code Online (Sandbox Code Playgroud)

  • 为什么&lt;&gt;1?在我安装的 Postgresql 中,系统过程的 proowner 为 10,而不是 1。 (2认同)