PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Holen Sie sich alle prozeduralen, benutzerdefinierten Funktionen

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.