Il existe une fonction pratique pour vous aider :oidvectortypes
.
SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes))
FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid);
affiche toutes les fonctions avec arguments. Vous pouvez adapter ce format
incantation pour générer les déclarations souhaitées, et si vous le souhaitez, LOOP
dessus pour alimenter l'instruction générée dans EXECUTE
en PL/PgSQL.
Crédit à Leo Hsu et Regina Obe à Postgres En ligne
pour indiquer oidvectortypes
. J'ai déjà écrit des fonctions similaires, mais j'ai utilisé des expressions imbriquées complexes dont cette fonction se débarrasse.
Notez que dans ce cas, vous n'avez pas du tout à faire de génération SQL personnalisée , pourtant. Utilisez simplement GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...
si vous êtes sur un PostgreSQL vaguement récent.