Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Administration
Administration Forum d'entraide sur l'administration de PostgreSQL : utilisateurs, privilèges, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/12/2011, 12h19   #1
johnvox
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 64
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : mars 2005
Messages : 64
Points : 35
Points : 35
Envoyer un message via MSN à johnvox
Par défaut Sauvegarde - Restauration de base - Language already exists

Bonjour à tous.

Je me trouve face à un problème qui après pas mal de recherche n'a pas trouvé de solution.
J'espère que certains d'entre vous pourront m'éclairer
Je vais organiser mon poste en 3 partie : ce que je veux faire, ce que j’exécute, ce qui pose problème.

Tout d'abord ce que je veux faire :
  • Sauvegarder une base avec l'ensemble des infos (structure, données, fonctions, trigger) dans un fichier "dump"
  • Restaurer ces mêmes données (structure,données,trigger,etc...) dans une nouvelle base ayant un nom différent (ex: src=toto dst=titi)

Jusque là rien de bien sorcier.

Ensuite ce que je fais :
  1. un pg_dump ainsi :
    Code :
    pg_dump -i -F c -i -h ***.***.***.***  -p #### -U #### -f  c:\dump.bak maBaseSource
  2. un script de création qui est à la fin de la liste
  3. un pg_restore :
    Code :
    pg_restore -F c  -h ##### -p #### -U #### -d testingBackup C:\dump.bak

Code Source de creation de la base
Code :
1
2
3
4
5
6
7
8
 
CREATE DATABASE "testingBackup"
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'French_France.1252'
       LC_CTYPE = 'French_France.1252'
       CONNECTION LIMIT = -1;
Ce que j'ai comme problème :
Code :
1
2
3
4
5
6
7
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error FROM TOC entry 626; 2612 16386 PROCEDURAL LANG
UAGE plpgsql postgres
pg_restore: [archiver (db)] could NOT execute query: ERREUR:  le langage "plpgsql" existe déjà*
    Command was:
CREATE PROCEDURAL LANGUAGE plpgsql;
WARNING: errors ignored ON restore: 1
Dans le fond il n'y a pas de problème puisque tout est restauré mais dans un soucis de "propreté" je souhaite enlevé toute les erreurs.
Dans ce but je suis ouvert à toute vos propositions.

Merci d'avance de votre aide.
johnvox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 16h13   #2
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
La raison à ça est qu'à partir de la version 9 de postgres, le langage plpgsql est inclus implicitement dans le CREATE DATABASE, alors qu'avant il était optionnel

A part ignorer l'erreur qui n'a pas d'importance, il y a bien au moins 2 solutions pour qu'elle ne se produise pas:

1) Utiliser le pg_dump de la version cible, pour dumper la base source. En fait cette méthode est préconisée systématiquement pour passer à une version plus récente, et on voit pourquoi sur cet exemple: le nouveau pg_dump est toujours plus adapté que l'ancien à supporter les nouveautés.

2) Si pas possible, se connecter sur la base nouvellement créée avant le pg_restore et exécuter un DROP LANGUAGE plpgsql;
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/12/2011, 17h55   #3
johnvox
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 64
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : mars 2005
Messages : 64
Points : 35
Points : 35
Envoyer un message via MSN à johnvox
J'ai trouvé une autre solution, merci à Tom Lane* de la mailing PGSQL.

En fait chaque base de donnée est créée à partir d'un "modèle" de base de données qui est copié pour créer la nouvelle.

Le modèle par défaut est template1 qui contient le langage plpgsql.
la solution serait donc d'indiquer
Code :
WITH TEMPLATE=template0
dans le script de création de base.

Merci également estofilo, j'avais en effet envisagé ta deuxième méthode.
johnvox est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h36.


 
 
 
 
Partenaires

Hébergement Web