PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 14/06/2010 16:46:13

Aymen_
Membre

Limite de la commande pg_dump

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

#2 14/06/2010 17:26:10

gleu
Administrateur

Re : Limite de la commande pg_dump

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 smile


Guillaume.

Hors ligne

Pied de page des forums