Overweeg:
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';
Zie ook:Wat is de opdracht om het script van een bestaande functie in postgresql te vinden?
Gebruik pg_get_functiondef
of de prosrc
kolom van pg_proc
direct. Het belangrijkste idee is om mee te doen op pg_namespace
en filter de PostgreSQL-catalogusfuncties uit, die waarschijnlijk voor de meeste doeleinden voldoende zullen zijn:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Het probleem met het verkrijgen van de broncode voor door de gebruiker gedefinieerde functies bepaalt wat gebruiker middelen. Er kunnen veel soorten functies worden gemaakt:
- Functies met
CREATE EXTENSION
. - Functies gemaakt door PostgreSQL.
- Functies samengesteld en geïnstalleerd door een beheerder.
Superusers met voldoende subsidies kunnen functies definiëren in pg_proc
, maar meestal niet.
Aangezien alleen superusers C-taalfuncties kunnen maken, sluit u deze uit. Dergelijke functies kunnen op maat worden geïnstalleerd op een bepaalde database door de beheerder, maar niet door een normale gebruiker.