Verwenden Sie pg_getfunctiondef
; siehe Systeminformationsfunktionen. pg_getfunctiondef
wurde in PostgreSQL 8.4 hinzugefügt.
SELECT pg_get_functiondef('proc_name'::regproc);
Um alle Funktionen in einem Schema auszugeben, können Sie die Systemtabellen in pg_catalog
abfragen; Sagen Sie, ob Sie alles von public
wollen :
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';
Es ist trivial, das obige zu ändern, um " von allen Schemas außer denen zu sagen, die mit pg_
beginnen " stattdessen, wenn Sie das möchten.
In psql
Sie können dies in eine Datei ausgeben mit:
psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
Um die Ausgabe in einer anderen DB auszuführen, verwenden Sie etwas wie:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Wenn Sie jedoch Funktionen zwischen Datenbanken wie dieser replizieren, sollten Sie erwägen, die autorisierte Kopie der Funktionsdefinitionen als SQL-Skript in einem Versionskontrollsystem wie svn oder git zu speichern, vorzugsweise als PostgreSQL-Erweiterung gepackt. Siehe Paketerweiterungen.