PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Obtenha todas as funções processuais definidas pelo usuário


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.