Я хочу сделать резервную копию всех функций в моей базе данных postgres. Как сделать резервную копию функций только в Postgres?
Как сделать резервную копию функций только в Postgres
Ответы (2)
используйте 1_; см. функции системной информации. 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__
Чтобы запустить вывод в другой БД, используйте что-то вроде:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Тем не менее, если вы реплицируете функции между базами данных, подобными этой, подумайте о том, чтобы сохранить авторитетную копию определений функций в виде сценария SQL в системе контроля версий, такой как svn или git, предпочтительно упакованной как расширение PostgreSQL. См. расширения упаковки.
pg_get_functiondef('proc_name'::regproc)
НЕ сбрасывает привилегии функции (операторы GRANT
и REVOKE
), которые иногда могут рассматриваться как часть определения функции.
- person NumberFour; 22.07.2016
ORDER BY pg_get_functiondef(f.oid)
Спасибо!
- person nbburn; 02.02.2019
Вы не можете указать pg_dump
сбрасывать только функции. Однако вы можете сделать дамп без данных (-s
или --schema-only
) и отфильтровать его при восстановлении. Обратите внимание на часть --format=c
(также -Fc
): это создаст файл, подходящий для pg_restore
.
Сначала возьмем дамп:
pg_dump -U username --format=c --schema-only -f dump_test your_database
Затем создайте список функций:
pg_restore --list dump_test | grep FUNCTION > function_list
И, наконец, восстановите их (-L
или --use-list
указывает файл списка, созданный выше):
pg_restore -U username -d your_other_database -L function_list dump_test