Há uma função útil para ajudá-lo:
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);
mostra todas as funções com argumentos. Você pode adaptar esse
format
encantamento para gerar quaisquer declarações desejadas e, se desejar, LOOP
sobre ele para alimentar a instrução gerada em EXECUTE
em PL/PgSQL. Crédito para Leo Hsu e Regina Obe no Postgres On-line para apontar
oidvectortypes
. Eu escrevi funções semelhantes antes, mas usei expressões aninhadas complexas que essa função elimina a necessidade. Observe que, neste caso, você não precisa fazer nenhuma geração de SQL personalizada , no entanto. Basta usar
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...
se você estiver em um PostgreSQL vagamente recente.