在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參數(顯示隱藏的查詢),然後運行\ df命令運行PSQL實測值。
另外,PostgreSQL中的「公共」模式就是這樣命名的。它沒有特別的意義。這是一個糟糕的名字。你需要注意的是「公共」角色(全部大寫)。雖然表格不會自動授予PUBLIC角色,但我的經驗是,PUBLIC自動獲得對使用SECURITY INVOKER定義的函數的執行權限。
我差點忘了:那個查詢只顯示用戶定義的函數。如果您需要內部函數,則需要刪除WHERE子句的「AND n.nspname <>'pg_catalog'」部分。 – 2010-10-07 14:36:05
謝謝,這似乎接近我想要的。因爲我使用的是PostgreSQL 8.2.9,所以我沒有函數pg_get_fuction_result(oid)和pg_get_function_arguments(oid),所以也許你知道等價的8.2。功能?我找了他們,但找不到他們。此外,列proiswindow不存在。 – 2010-10-07 14:51:30
在命令行運行此命令:「psql -E」。然後發出psql命令「\ df」。這將打印使用它來輸出的功能列表(參數和返回類型)查詢。這應該適用於PostgreSQL的所有版本。 – 2010-10-07 17:34:36