繁体   English   中英

列出所有用户定义的PostgreSQL函数的方法是什么?

[英]Any way to list all user-defined PostgreSQL functions?

PostgreSQL提供命令\\ dv列出所有视图。 是否有类似的方法列出所有用户定义的函数,或者可能只列出特定用户定义的函数? \\ sf要求您知道函数的名称,它将提供函数的定义。 \\ df列出了所有功能(并且有很多功能)。 我想要一种方法来显示我定义的函数列表。

查找此类查询的最佳方法是使用带有--echo-hidden选项的psql 然后运行psql元命令,您将看到使用的查询。

对于\\df这是:

SELECT n.nspname as "Schema",
  p.proname as "Name",
  pg_catalog.pg_get_function_result(p.oid) as "Result data type",
  pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
 CASE
  WHEN p.proisagg THEN 'agg'
  WHEN p.proiswindow THEN 'window'
  WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
  ELSE 'normal'
 END as "Type"
FROM pg_catalog.pg_proc p
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
ORDER BY 1, 2, 4;

您可以通过将where子句更改为:

AND n.nspname = 'public'

这相当于\\df public.*


如果你查看pg_proc的文档,你会发现有一个proowner列,所以你也可以运行:

SELECT n.nspname as "Schema",
       p.proname as "Name",
       pg_catalog.pg_get_function_result(p.oid) as "Result data type",
       pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types"
FROM pg_catalog.pg_proc p
  JOIN pg_catalog.pg_roles u ON u.oid = p.proowner
  LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
  AND n.nspname = 'public' 
  AND u.rolname = current_user --<< this limits the functions to those that the current user owns.

我不确定这个命令是否完全准确,但它似乎向我展示了特定角色拥有的所有功能:

SELECT routine_name, grantee FROM information_schema.routine_privileges WHERE grantee = '<role>';

无论如何,它给了我期望看到的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM