2

ユーザーが実行できるすべての機能の完全なリストが必要です。

psql でユーザーとして接続すると\df、データベース内の関数のリストを取得するために使用できます。ただし、MAX()、COUNT()、pg_advisory_lock() などの関数はリストされていません。ユーザーがそもそも実行できない関数もリストされています。

4

1 に答える 1

5

リストは非常に広範囲ですが、次のクエリでこれを実現できます。

SELECT oid::regproc
FROM pg_proc
WHERE has_function_privilege(oid,'execute');

このhas_function_privilege関数は 2 つの引数を使用して、(最初の引数として指定された) 関数が現在のユーザーに対して (2 番目の引数からの) 特権を持っているかどうかをチェックします。また、バリアントを 3 つの引数とともに使用して、最初にユーザーに通知することもできます。

SELECT oid::regproc
FROM pg_proc
WHERE has_function_privilege('your_user_name',oid,'execute');

もちろん、出力を改善することもできます(のクエリpsqlから適応):psql

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.has_function_privilege(p.oid, 'execute')
ORDER BY 1, 2, 4;
于 2013-09-12T16:23:16.967 に答える