Pertimbangkan:
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';
Lihat juga:Apa perintah untuk menemukan skrip fungsi yang ada di postgresql?
Gunakan pg_get_functiondef
atau prosrc
kolom dari pg_proc
secara langsung. Ide kuncinya adalah bergabung di pg_namespace
dan menyaring fungsi katalog PostgreSQL, yang mungkin akan memadai untuk sebagian besar tujuan:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Masalah dengan mendapatkan kode sumber untuk ditentukan pengguna fungsi memutuskan apa pengguna cara. Banyak jenis fungsi yang dapat dibuat:
- Fungsi menggunakan
CREATE EXTENSION
. - Fungsi yang dibuat oleh PostgreSQL.
- Fungsi dikompilasi dan diinstal oleh administrator.
Pengguna super dengan hibah yang cukup dapat mendefinisikan fungsi di pg_proc
, tapi biasanya tidak.
Karena hanya pengguna super yang dapat membuat fungsi bahasa C, kecualikan mereka. Fungsi tersebut dapat diinstal secara khusus pada database tertentu oleh admin, tetapi bukan pengguna biasa.