2017-05-23 8 views
1

PostgreSQLはすべてのビューを表示するコマンド\ dvを提供しています。同様の方法で、すべてのユーザー定義関数をリストするか、特定のユーザーによって定義された関数だけをリストすることはできますか? \ sfでは、関数の名前を知る必要があり、関数の定義を提供します。 \ dfにはすべての関数がリストされています。私が定義した関数のリストを表示する方法が欲しい。ユーザ定義のPostgreSQL関数をリストする方法はありますか?

答えて

1

--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; 

あなたは、例えばによってそれを調整することができます変更条項にここで、あなたはあなたがまた、実行できるようproowner列があることがわかりますthe documentation of pg_procチェックすると

AND n.nspname = 'public' 

\df public.*


に相当する:

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. 
0

このコマンドが完全に正確かどうかわかりませんが、特定の役割が所有するすべての機能を表示しているようです:

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

いずれにせよ、私には期待される結果が得られます。

関連する問題