Ну, список довольно обширен, но вы можете добиться этого с помощью следующего запроса:
SELECT oid::regproc
FROM pg_proc
WHERE has_function_privilege(oid,'execute');
The has_function_privilege
функции, с двумя аргументами, проверьте, если функция (при условии, как первый аргумент) имеет привилегия (от второго аргумента) текущему пользователю. Кроме того, можно использовать вариант с тремя аргументами и сообщить пользователю, как первый:
SELECT oid::regproc
FROM pg_proc
WHERE has_function_privilege('your_user_name',oid,'execute');
Конечно, мы можем улучшить результат, как psql
делает (адаптировано из psql
«s запрос):
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;