Има удобна функция, която да ви помогне: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);
показва всички функции с аргументи. Можете да адаптирате този format
заклинание, за да генерирате всякакви желани изрази и, ако желаете, LOOP
над него, за да подадете генерирания израз в EXECUTE
в PL/PgSQL.
Кредит към Leo Hsu и Regina Obe в Postgres Онлайн
за посочване на oidvectortypes
. Писах подобни функции и преди, но използвах сложни вложени изрази, от които тази функция се отървава.
Обърнете внимание, че в този случай изобщо не трябва да правите персонализирано генериране на SQL , обаче. Просто използвайте GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema TO ...
ако използвате неясно скорошен PostgreSQL.