Overvej:
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';
Se også:Hvad er kommandoen til at finde script til en eksisterende funktion i postgresql?
Brug pg_get_functiondef
eller prosrc
kolonne fra pg_proc
direkte. Nøgleideen er at deltage på pg_namespace
og filtrer PostgreSQL-katalogfunktionerne fra, som sandsynligvis vil være tilstrækkelige til de fleste formål:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Problemet med at få kildekoden til brugerdefineret funktioner bestemmer hvilken bruger midler. Mange typer funktioner kan oprettes:
- Funktioner ved hjælp af
CREATE EXTENSION
. - Funktioner oprettet af PostgreSQL.
- Funktioner kompileret og installeret af en administrator.
Superbrugere med tilstrækkelige bevillinger kan definere funktioner i pg_proc
, men gør det normalt ikke.
Da kun superbrugere kan oprette C-sprogfunktioner, skal du ekskludere dem. Sådanne funktioner kan specialinstalleres på en bestemt database af administratoren, men ikke en normal bruger.