Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : mars 2005
    Messages : 70
    Points : 34
    Points
    34

    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.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 803
    Points : 2 476
    Points
    2 476

    Par défaut

    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;

  3. #3
    Nouveau Membre du Club
    Inscrit en
    mars 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 23

    Informations forums :
    Inscription : mars 2005
    Messages : 70
    Points : 34
    Points
    34

    Par défaut

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •