Considera:
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';
Vedi anche:Qual è il comando per trovare lo script di una funzione esistente in postgresql?
Usa pg_get_functiondef
o il prosrc
colonna da pg_proc
direttamente. L'idea chiave è partecipare a pg_namespace
e filtra le funzioni del catalogo PostgreSQL, che probabilmente saranno adeguate per la maggior parte degli scopi:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Il problema con l'ottenimento del codice sorgente per definito dall'utente funzioni sta decidendo quale utente significa. È possibile creare molti tipi di funzioni:
- Funzioni che utilizzano
CREATE EXTENSION
. - Funzioni create da PostgreSQL.
- Funzioni compilate e installate da un amministratore.
I superutenti con sufficienti sovvenzioni possono definire funzioni in pg_proc
, ma di solito non lo fanno.
Poiché solo i superutenti possono creare funzioni in linguaggio C, escludile. Tali funzioni possono essere installate in modo personalizzato su un particolare database dall'amministratore, ma non da un normale utente.