Zvažte:
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';
Viz také:Jaký je příkaz k nalezení skriptu existující funkce v postgresql?
Použijte pg_get_functiondef
nebo prosrc
sloupec z pg_proc
přímo. Klíčovou myšlenkou je připojit se na pg_namespace
a odfiltrujte funkce katalogu PostgreSQL, které budou pravděpodobně pro většinu účelů dostačující:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Problém se získáním zdrojového kódu pro definované uživatelem funkce rozhoduje o tom, jaký uživatel prostředek. Lze vytvořit mnoho typů funkcí:
- Funkce využívající
CREATE EXTENSION
. - Funkce vytvořené PostgreSQL.
- Funkce zkompilované a nainstalované administrátorem.
Superuživatelé s dostatečnými granty mohou definovat funkce v pg_proc
, ale obvykle ne.
Protože funkce jazyka C mohou vytvářet pouze superuživatelé, vylučte je. Tyto funkce může do konkrétní databáze nainstalovat uživatel, ale ne normální uživatel.