utilisez pg_getfunctiondef
; voir les fonctions d'information système. pg_getfunctiondef
a été ajouté dans PostgreSQL 8.4.
SELECT pg_get_functiondef('proc_name'::regproc);
Pour vider toutes les fonctions d'un schéma, vous pouvez interroger les tables système dans pg_catalog
; dites si vous vouliez tout de public
:
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';
il est trivial de changer ce qui précède pour dire "de tous les schémas sauf ceux commençant par pg_
" à la place si c'est ce que vous voulez.
En psql
vous pouvez le vider dans un fichier avec :
psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
Pour exécuter la sortie dans une autre base de données, utilisez quelque chose comme :
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Si vous répliquez des fonctions entre des bases de données comme celle-ci, envisagez de stocker la copie faisant autorité des définitions de fonctions sous forme de script SQL dans un système de contrôle de révision tel que svn ou git, de préférence sous forme d'extension PostgreSQL. Voir les extensions d'empaquetage.