-- Replace 'schema_name', 'procedure_name', and argument types as needed SELECT r.rolname AS role_name, p.proname AS procedure_name, n.nspname AS schema_name, pg_get_function_identity_arguments(p.oid) AS arguments, has_function_privilege(r.rolname, p.oid, 'EXECUTE') AS can_execute FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace JOIN pg_roles r ON has_function_privilege(r.rolname, p.oid, 'EXECUTE') WHERE n.nspname = 'public' -- schema name AND p.proname = 'my_procedure' -- procedure name -- Optional: match argument types if overloaded -- AND pg_get_function_identity_arguments(p.oid) = 'integer, text' ORDER BY role_name; How it works: pg_proc — stores all functions and procedures. pg_namespace — stores schema names. pg_roles — stores all roles (users/groups). has_function_priv...