web-dev-qa-db-fra.com

Comment prendre la sauvegarde des fonctions uniquement dans Postgres

Je souhaite effectuer une sauvegarde de toutes les fonctions dans ma base de données postgres. Comment effectuer une sauvegarde des fonctions uniquement dans Postgres?

25
vmb

utilisation pg_getfunctiondef; voir fonctions d'informations 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.

Dans 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 autorisée des définitions de fonction sous forme de script SQL dans un système de contrôle de révision comme svn ou git, de préférence empaqueté sous la forme d'une extension PostgreSQL. Voir extensions d'emballage .

53
Craig Ringer

Vous ne pouvez pas dire pg_dump pour vider uniquement les fonctions. Cependant, vous pouvez effectuer un vidage sans données (-s) et le filtrer lors de la restauration. Noter la -Fc part: cela produira un fichier adapté à pg_restore.

Prenez d'abord le dépotoir:

pg_dump -U username -Fc -s -f dump_test your_database

Créez ensuite une liste des fonctions:

pg_restore -l dump_test | grep FUNCTION > function_list

Et enfin les restaurer (-L spécifie le fichier de liste créé ci-dessus):

pg_restore -U username -d your_other_database -L function_list dump_test
26
dezso