在 PostgreSQL 8.4.x 中:
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;
通过使用 -E 参数运行 psql(显示隐藏的查询)然后运行 \df 命令找到。
此外,PostgreSQL 中的“公共”模式就是这样命名的。它没有特殊含义。这是一个坏名字。您需要注意的是“公共”角色(全部大写)。虽然表不会自动授予 PUBLIC 角色,但我的经验是 PUBLIC 会自动获得对使用 SECURITY INVOKER 定义的函数的执行权限。