Hay una función útil para ayudarte: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);
muestra todas las funciones con argumentos. Puedes adaptar ese format
encantamiento para generar las declaraciones deseadas, y si lo desea, LOOP
sobre él para alimentar la declaración generada en EXECUTE
en PL/PgSQL.
Crédito a Leo Hsu y Regina Obe en Postgres En línea
por señalar oidvectortypes
. Escribí funciones similares antes, pero usé expresiones anidadas complejas que esta función elimina.
Tenga en cuenta que en este caso no tiene que hacer ninguna generación de SQL personalizado , aunque. Simplemente use GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...
si está en un PostgreSQL vagamente reciente.