Помислете за следното:
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';
Вижте също:Каква е командата за намиране на скрипт на съществуваща функция в postgresql?
Използвайте pg_get_functiondef
или prosrc
колона от pg_proc
директно. Основната идея е да се присъедините към pg_namespace
и филтрирайте каталожните функции на PostgreSQL, което вероятно ще бъде подходящо за повечето цели:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Проблемът с получаването на изходния код за дефиниран от потребителя функции решава какъв потребител означава. Могат да се създават много видове функции:
- Функции, използващи
CREATE EXTENSION
. - Функции, създадени от PostgreSQL.
- Функции, компилирани и инсталирани от администратор.
Суперпотребители с достатъчно разрешения могат да дефинират функции в pg_proc
, но обикновено не го правят.
Тъй като само суперпотребители могат да създават функции на език C, изключете ги. Такива функции могат да бъдат персонализирано инсталирани в конкретна база данни от администратора, но не и от нормален потребител.