Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'utilise pg_dump avec cette synthaxe pour sauvegarder le shema de ma BD, car j'ai besoin de porter mes fonctions sur un autre serveur de BD:
pg_dump -h 127.0.0.1 -p5432 -U postgres -d ma_base -s -n schema > /schema_1.sql
Mon probleme est qu'avec le fichier de sortie, je ne peux pas mettre a jours des fonctions qui existent deja, par exemple sur une autres BD. En regardant le fichier de sauvegarde j'ai pu constate que la syntaxe CREATE OR REPLACE n'est pas utilise dans la declaration des fonctions, on retrouve juste CREATE.
En utilisant l'option -c, j'arrive a mettre a jour mes fonctions mais je perds les donnees de mes tables.
Donc, je voulais savoir 1) s'il est possible de sauvegarder juste les fonctions de mon schema 2) existe -il une commande pour forcer la mise a jour de fonction deja existante dans un schema.
Merci.
Hors ligne
1) s'il est possible de sauvegarder juste les fonctions de mon schema
Non.
2) existe -il une commande pour forcer la mise a jour de fonction deja existante dans un schema.
Oui, vous la connaissez déjà, c'est CREATE OR REPLACE. Le problème, c'est qu'elle n'est pas utilisée par défaut, sauf dans le cas d'une sauvegarde -c.
Vous avez deux solutions pour vous en sortir. Dans les deux cas, on passe par une sauvegarde au format tar ou custom (donc avec les options respectives -Ft et -Fc). Une fois que vous avez votre sauvegarde dans ce format, vous devez utiliser l'outil pg_restore pour la restauration.
Première solution, utilisez l'option -F. Cependant, vous devrez founir le nom de toutes les fonctions à restaurer, ce qui peut devenir très ennuyant.
Seconde solution, utilisez les options -l et -L. Voici ce qu'il faut faire en plus détaillé :
un pg_restore -l fichier_de_sauvegarde > /tmp/toc
en remplaçant fichier_de_sauvegarde par le nom et le chemin vers le fichier de sauvegarde au format custom ou tar.
grep FUNCTION /tmp/toc > /tmp/toc2
on ne récupère que la définition des fonctions dans un fichier /tmp/toc2
pg_restore -c -L /tmp/toc2 -d base_de_données fichier_de_sauvegarde
en remplaçant fichier_de_sauvegarde par le nom et le chemin vers le fichier de sauvegarde au format custom ou tar et base_de_données par la base de restauration.
Une fois que c'est suffisamment fonctionnel, ça peut même être intégré dans un script, cool non
Guillaume.
Hors ligne
Pages : 1