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 04/01/2017 16:12:31

Athena
Membre

Erreur de lors de la restauration sur un nouveau serveur

Bonjour,


Je migre un ancien serveur vers un nouveau, et il y a une DB 8.2 à transférer.
J'ai installé la version 9.6 sur le nouveau serveur.


J'utilise les dumps réalisés sur le serveur 8.2 par la commande :
    pg_dump.exe -i -h localhost -p 5432 -U postgres -F c -b -v -f "C:\Server Files\Backup\postgresql\db_ptg.backup" "db_ptg"


J'ai donc un fichier db_ptg.backup à réinstaller dans la nouvelle DB 9.6 vide.



J'envoie la commande :
    pg_restore.exe -U admin-user -d db_ptg  -c -v -1 "D:\Test-PostGRE\postgresql\db_ptg.backup"


Et j'obtiens une erreur :


    pg_restore: connexion à la base de données pour la restauration
Mot de passe :  'REM : j'ai introduit le bon mot de passe'


pg_restore: suppression de TRIGGER RI_ConstraintTrigger_26693

pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 1860 ;
2620 26693 TRIGGER RI_ConstraintTrigger_26693 postgres
pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  la relation « public.notes » n'existe pas
    La commande était : DROP TRIGGER "RI_ConstraintTrigger_26693" ON public.note
s;



Que faire pour corriger le problème ?


Merci d'avance pour votre aide.

Hors ligne

#2 04/01/2017 17:10:03

Marc Cousin
Membre

Re : Erreur de lors de la restauration sur un nouveau serveur

Il a essayé de faire un drop trigger (vous avez passé l'option -c à pg_restore), qui a échoué. Couplé au "-1" (une seule transaction), la restauration s'est arrêtée là et est partie en rollback.

Essayez sans le -c ou sans le -1 (et avec une base vide). Ou sans aucun des deux, si votre base est vide.

Hors ligne

#3 04/01/2017 18:34:23

Athena
Membre

Re : Erreur de lors de la restauration sur un nouveau serveur

Merci pour votre réponse.
Ca progresse, mais c'est encore loin d'être parfait.


Voici mon script actuel :
    C:\Program Files\PostgreSQL\9.6\bin\pg_restore.exe" --host "localhost" --port "5432" --username "postgres" --password --role "postgres" --dbname "db_ptg" --verbose "C:/Program Files/PostgreSQL/9.6/Exports/db_ptg.backup"


Mais je reçois 2 types d'erreurs en rafale.



Erreur 1 :
    pg_restore: création de FUNCTION « public.char(integer) »
    pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 20 ; 1255 26356 FUNCTION char(integer) jf
    pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  le rôle « jf » n'existe pas
    La commande était : ALTER FUNCTION public."char"(integer) OWNER TO jf;

Un rôle n'existe pas...  Pourquoi ?




Erreur 2:
    pg_restore: création de TRIGGER « public.RI_ConstraintTrigger_26658 »
    pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 1904 ; 2620 26658 TRIGGER RI_ConstraintTrigger_26658 postgres
    pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  la contrainte « num_type_presta_pointages » de la relation « pointages » existe déjà
    La commande était : CREATE CONSTRAINT TRIGGER num_type_presta_pointages
        AFTER UPDATE ON type_presta
        FROM pointages
        NOT DEFERRABLE IN...



Merci d'avance pour votre aide.

Hors ligne

#4 04/01/2017 19:34:15

Marc Cousin
Membre

Re : Erreur de lors de la restauration sur un nouveau serveur

Erreur 1: ce que vous restaurez est un dump d'une base de données. Les utilisateurs sont des objets globaux à l'instance, ils ne seront donc pas dans le dump.

Donc soit vous créez le rôle jf à la main avant de commencer, soit vous pouvez générer un script contenant les objets globaux sur l'instance source: pg_dumpall -g (avec les options de connexion qui vont bien, coup de bol, c'est la même syntaxe que pour pg_dump/pg_restore smile )

Erreur 2: Vous essayez de restaurer une contrainte qui existe déjà… elle devait vraiment déjà exister (vous n'avez peut-être pas nettoyé la base de départ avant de restaurer? le plus simple c'est drop database suivi de create database)

Hors ligne

#5 04/01/2017 21:17:58

Athena
Membre

Re : Erreur de lors de la restauration sur un nouveau serveur

Merci pour l'info.

Effectivement, en créant le rôle jf, tout se simplifie.



J'ai droppé la DB avant de l'importer.

Et j'ai toujours cette erreur de contrainte déjà existante...
Bizarre...


De plus, j'ai trouvé cette erreur-ci :

    pg_restore: création de TRIGGER « public.RI_ConstraintTrigger_26650 »
    pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
    pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 1882 ; 2620 26650 TRIGGER RI_ConstraintTrigger_26650 postgres
    pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  il n'existe aucune contrainte unique correspondant aux clés données pour la
    table « travailleurs » référencée
        La commande était : CREATE CONSTRAINT TRIGGER init_horaires
        AFTER UPDATE ON travailleurs
        FROM horaires
        NOT DEFERRABLE INITIALLY IMME...

Hors ligne

#6 04/01/2017 21:22:13

Marc Cousin
Membre

Re : Erreur de lors de la restauration sur un nouveau serveur

Très bizarre effectivement.

Ça pourrait être intéressant de lister le contenu de la TOC du fichier: c'est l'option -l de pg_restore.

Sinon, ce qui pourrait aussi valoir le coup, c'est de tenter le pg_dump avec le pg_dump de la 9.6 plutôt qu'avec le pg_dump de la 8.2 (je présume que c'est ce que vous avez fait).

Hors ligne

#7 04/01/2017 21:58:04

Athena
Membre

Re : Erreur de lors de la restauration sur un nouveau serveur

Le pg_restore avec -l génère une belle liste, mais aucun message d'erreur dans le log...

Quant au pg_dump sur le serveur d'origine, j'ai laissé la version 8.2  Je n'ose pas installer la 9.6.
A vrais dire, je touche le moins possible au serveur, qui est agonisant.
Il est grand temps qu'il soit migré vers une machine récente, car le système disque de l'actuel donne des erreurs, le DNS ne fonctionne plus, des programmes refusent de démarrer...

Hors ligne

Pied de page des forums