Considerar:
select
pp.proname,
pl.lanname,
pn.nspname,
pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname NOT IN ('c','internal')
and pn.nspname NOT LIKE 'pg_%'
and pn.nspname <> 'information_schema';
Veja também:Qual é o comando para encontrar script de uma função existente no postgresql?
Use
pg_get_functiondef
ou o prosrc
coluna de pg_proc
diretamente. A ideia chave é juntar-se no pg_namespace
e filtre as funções do catálogo do PostgreSQL, que provavelmente serão adequadas para a maioria dos propósitos:FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
O problema de obter o código-fonte para definido pelo usuário funções é decidir qual usuário significa. Muitos tipos de funções podem ser criados:
- Funções usando
CREATE EXTENSION
. - Funções criadas pelo PostgreSQL.
- Funções compiladas e instaladas por um administrador.
Superusuários com permissões suficientes podem definir funções em
pg_proc
, mas geralmente não. Como apenas superusuários podem criar funções de linguagem C, exclua-os. Essas funções podem ser instaladas de forma personalizada em um banco de dados específico pelo administrador, mas não por um usuário normal.