Migrer des bases postgresql avec PgAdmin 4:problèmes et solutions

Mise à jour du 28/04/2017

Le problème soulevé ici a été résolu par l’équipe de pgAdmin (testé sur la version 1.4 de pgAdmin). Si vous trouvez ce problème et que vous avez une version antérieure de pgAdmin 4, il suffit de télécharger et installer la dernière version). Par contre la méthode peut toujours servir pour contourner des éventuelles erreurs de pgAdmin, en réutilisant la syntaxe récupérée sur la fenêtre d’erreur)

Depuis peu, la nouvelle version de PostgreSQL 9.6 est disponible. Parmi les nouveautés, une nouvelle interface du client PgAdmin est disponible (PgAdmin 4 v1.1).
Si vous voulez migrer vos bases de données d’une version précédente de PostgreSQL vers une base 9.6, ce n’est pas gagné!
Tout d’abord plantons le décor: je ne parlerai que du travail sous Windows, je n’ai pas des infos si ceci arrive aussi sous Linux. Deuxièmement, j’ai reporté le bug depuis un mois à l’équipe de PgAdmin mais pour l’instant il n’a pas été pris en charge. Mais comme il faut bien continuer à travailler en attendant que le problème soit résolu, voici un moyen de contourner le problème.

Commençons par le problème.
Si vous avez des bases de données PostgreSQL dans des versions antérieures (9.5 et moins) et que vous voulez les faire migrer vers une base PostgreSQL 9.6
pgadmin4Dans cet exemple, nous voulons migrer toutes les tables contenues dans la base de données postgis_22_sample du serveur postgreSQL 9.5 vers la base de données postgis_23_sample du serveur postgreSQL 9.6.

La méthode avec PgAdmin est de faire une sauvegarde de la première base vers un fichier externe (.backup), puis de restaurer ce fichier dans la deuxième base.

backup d'une base avec pgadmin 4Avec PgAdmlin 4 il y a une nouvelle option qui permet d’exporter une table vers un fichier texte, puis de l’importer dans la nouvelle base. Mais ceci s’applique à une seule table.

commande import/export de pgadmin 4

Sachez aussi que les deux méthodes plantent pareil…

On lance le backup de la base postgis_22_sample

fenêtre backup de pgadmin 4On choisit seulement le répertoire et nom du fichier de sauvegarde, puis on clique sur backup.

Dans le coin bas-droit de l’écran vous verrez la fenêtre de suivi du processus:

suivi d'un processus dans pgadmin 4Au bout de quelques secondes, la message indique une erreur:

erreur du processus dans pgadmin 4Cliquez sur le lien « Click here for details » pour ouvrir la fenêtre d’information

fenêtre de détail du processus de pgadmin 4Le message d’erreur indique que le Codec UTF-8 a planté.

C’est ce type de message que vous aurez:

  • si vous essayez de sauvegarder une base d’une version précédente
  • si vous essayez de restaurer une base à partir d’un fichier créé sous une version précédente
  • si vous essayez d’exporter une table avec la commande Export/Import

Le moyen de contourner le problème, c’est de ne pas utiliser PgAdmin 4 pour effectuer l’opération. Avec la souris, sélectionnez le texte de la « Running command »:

  • sélection de la commande de pgAdmin 4Appuyez sur Ctrl C pour copier ce texte dans le presse papier.
  • Ouvrez un fichier texte sur votre bureau (clic droit sur le bureau -> Nouveau -> Document texte)
  • Collez le texte de la commande

Nous allons exécuter cette commande à partir d’une fenêtre de commandes. Le problème c’est que, telle qu’elle, elle ne pourra pas s’exécuter à cause des espaces dans l’arborescence du programme (pgdump.exe). Pour qu’elle puisse s’exécuter nous devons entourer le texte

C:\Program Files\PostgreSQL\9.6\bin\pg_dump.exe

Avec des guillemets. Le texte de la commande dans notre fichier texte devient alors:

« C:\Program Files\PostgreSQL\9.6\bin\pg_dump.exe » –file « C:/tmp/base95.backup » –host « localhost » –port « 5432 » –username « postgres » –no-password –verbose –format=c –blobs « postgis_22_sample »

Ouvrez un fenêtre de commandes

ouverture d'une invite de commandesCopiez le texte de la commande dans le presse papier, cliquez droit sur la fenêtre de commandes et sélectionnez Coller

commande dans l'invite de commandesTapez sur Entrée, la commande s’exécute sans erreur, cette fois-ci.

commande exécutée dans l'invite de commandesNous avons maintenant notre fichier backup de la base postgresql 9.5.

Pour la charger dans notre base postgresql 9.6 nous allons suivre la même procédure:

  • utiliser la commande de pgadmin 4 qui plante
  • récupérer le texte de la commande
  • l’exécuter dans une fenêtre de commandes

Dans pgAdmin 4 positionnez-vous sur la base de données 9.6 qui doit recueillir les tables sauvegardées.

pg52 Ouvrez le menu contextuel de cette base et sélectionnez Restore

Renseignez le fichier à restaurer (celui que nous avons sauvegardé dans l’étape précédente) et cliquez sur Restore

La fenêtre d’info devrait s’afficher en bas à droite

pg54

Si elle ne s’affiche pas (ce qui arrive souvent) allez dans le menu de pgAdmin 4 (la barre de menu en haut de la fenêtre) et sélectionnez File -> reset layout.

Cliquez sur le lien Click here for details

pg55Sélectionnez la ligne de commande et copiez-collez cette ligne dans le fichier texte.

Entourez la commande restore.exe avec des guillemets:

« C:\Program Files\PostgreSQL\9.6\bin\pg_restore.exe » –host « localhost » –port « 5433 » –username « postgres » –no-password –dbname « postgis_23_sample » –verbose « C:/tmp/base95.backup »

Copiez cette ligne dans le presse-papier, puis collez-la dans la fenêtre de commandes:

pg56Une fois la commande exécutée, vous pouvez ouvrir la base dans pgAdmin 4

pg57Vous pourrez constater que les tables ont bien été chargées dans la nouvelle base postgresql 9.6.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *