Bedenken Sie:
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';
Siehe auch:Was ist der Befehl, um ein Skript einer vorhandenen Funktion in Postgresql zu finden?
Verwenden Sie pg_get_functiondef
oder der prosrc
Spalte aus pg_proc
direkt. Die Schlüsselidee ist, bei pg_namespace
mitzumachen und filtern Sie die PostgreSQL-Katalogfunktionen heraus, die wahrscheinlich für die meisten Zwecke ausreichend sind:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Das Problem mit dem Erhalten des Quellcodes für benutzerdefiniert Funktionen entscheidet, welcher Benutzer meint. Viele Arten von Funktionen können erstellt werden:
- Funktionen mit
CREATE EXTENSION
. - Von PostgreSQL erstellte Funktionen.
- Funktionen, die von einem Administrator kompiliert und installiert wurden.
Superuser mit ausreichenden Genehmigungen können Funktionen in pg_proc
definieren , aber normalerweise nicht.
Da nur Superuser C-Sprachfunktionen erstellen können, schließen Sie sie aus. Solche Funktionen können vom Administrator, aber nicht von einem normalen Benutzer, in einer bestimmten Datenbank individuell installiert werden.