Mise à jour du 28/04/2017
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
Dans 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.
Avec 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.
Sachez aussi que les deux méthodes plantent pareil…
On lance le backup de la base postgis_22_sample
On 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:
Au bout de quelques secondes, la message indique une erreur:
Cliquez sur le lien « Click here for details » pour ouvrir la fenêtre d’information
Le 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 »:
- Appuyez 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
Copiez le texte de la commande dans le presse papier, cliquez droit sur la fenêtre de commandes et sélectionnez Coller
Tapez sur Entrée, la commande s’exécute sans erreur, cette fois-ci.
Nous 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.
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
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
Sé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:
Une fois la commande exécutée, vous pouvez ouvrir la base dans pgAdmin 4
Vous pourrez constater que les tables ont bien été chargées dans la nouvelle base postgresql 9.6.