използвайте pg_getfunctiondef
; вижте функциите за системна информация. pg_getfunctiondef
беше добавен в PostgreSQL 8.4.
SELECT pg_get_functiondef('proc_name'::regproc);
За да изхвърлите всички функции в схема, можете да направите заявка за системните таблици в pg_catalog
; кажете, ако искате всичко от 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';
тривиално е да промените горното, за да кажете "от всички схеми с изключение на тези, започващи с pg_
" вместо това, ако това е, което искате.
В psql
можете да изхвърлите това във файл с:
psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
За да стартирате изхода в друга DB, използвайте нещо като:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Ако репликирате функции между DB като тази, помислете за съхраняване на пълномощното копие на дефинициите на функциите като SQL скрипт в система за контрол на ревизии като svn или git, за предпочитане пакетиран като разширение на PostgreSQL. Вижте разширенията за опаковки.