use
pg_getfunctiondef
; consulte as funções de informações do sistema. pg_getfunctiondef
foi adicionado no PostgreSQL 8.4. SELECT pg_get_functiondef('proc_name'::regproc);
Para despejar todas as funções em um esquema, você pode consultar as tabelas do sistema em
pg_catalog
; diga se você queria tudo 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';
é trivial alterar o acima para dizer "de todos os esquemas, exceto aqueles que começam com
pg_
" em vez disso, se é isso que você quer. Em
psql
você pode despejar isso em um arquivo com:psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
Para executar a saída em outro banco de dados, use algo como:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Se você estiver replicando funções entre bancos de dados como este, considere armazenar a cópia autoritária das definições de função como um script SQL em um sistema de controle de revisão como svn ou git, preferencialmente empacotado como uma extensão do PostgreSQL. Consulte extensões de embalagem.