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)
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幕后运行的内容.
和@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的适用函数名称.
此外,在评估功能时,可以看到更完整的图片.
您可以使用标准information_schema模式来获取有关数据库的元数据(它在SQL标准中,因此它应该在不同的数据库系统中以相同的方式工作).在这种情况下你想要information_schema.routines.
排除系统的东西:
select proname from pg_proc where proowner <> 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75590 次 |
| 最近记录: |