Pour avoir été confronté au problème pas plus tard que la semaine dernière, je me suis dit qu’il serait idiot de ne pas en faire profiter. Tout d’abord, la migration du système, pour cela je me suis basé sur l’article publié sur le blog de Nicolargo et intitulé : Mise à jour de Debian Lenny vers Squeeze, tout y est suffisamment clair et limpide pour procéder à l’opération. Ensuite, vient la migration de Postgresql, enfin des bases de la 8.3 vers la 8.4.

Je dresse le contexte : j’ai une instance qui tourne en production du produit Dynacase Platform édité par la société Anakeen. La migration vers la version 3.0.20 nécessite php 5.3 et postgresql 8.4 en pré-requis. Je décide donc de procéder à la migration sur une instance de test (on n’est jamais assez prudent). La migration du système a déjà installé Postgresql 8.4 mais stupéfaction, l’application ne réussi pas à se connecter à ma base de données. Après quelques recherches sur internet (STFW), j’ai appliqué cette procédure :

Il faut tout d’abord réinstaller Postgresql 8.3 (si si, je ne me suis pas trompé) pour utiliser l’utilitaire pg_upgradecluster (toutes les commandes seront lancées avec le compte root) et pour cela il faudra rajouter le dépôt qui va bien :

<pre lang="bash">
# echo "deb http://archive.debian.org/debian-archive/debian/ lenny main contrib non-free" >> /etc/apt/sources.list
# aptitude update && aptitude install postgresql-8.3
# /etc/init.d/postgresql stop && /etc/init.d/postgresql start

Le problème ici c’est que ce raccourci lance en même temps les deux instances Postgresql, et donc il faut arrêter la version 8.4 pour lancer pg_upgradecluster à l’aide d’un autre utilitaire pg_dropcluster (vous suivez toujours ?) sinon vous aurez un message Error: target cluster 8.4/main already exists :

<pre lang="bash">
# pg_dropcluster 8.4 main --stop

On lance la migration et on enlève l’instance 8.3 et on purge les paquets inutiles dans la foulée:

<pre lang="bash">
# pg_upgradecluster 8.3 main && pg_dropcluster 8.3 main
# apt-get remove --purge postgresql-8.3 && apt-get remove --purge postgresql-client-8.3

A ce stade, nous n’oublierons pas d’éditer le fichier sources.list et d’en enlever la ligne précédemment ajoutée !

La migration est finie, on s’assure que tout fonctionne bien !

Juste pour information, voici le log généré par ma migration :

<pre lang="bash">
mixvir:/etc/postgresql/8.3/main# pg_dropcluster 8.4 main --stop
mixvir:/etc/postgresql/8.3/main# pg_upgradecluster 8.3 main
Stopping old cluster...
Disabling connections to the old cluster during upgrade...
Restarting old cluster with restricted connections...
Creating new cluster (configuration: /etc/postgresql/8.4/main, data: /var/lib/postgresql/8.4/main)...
Moving configuration file /var/lib/postgresql/8.4/main/postgresql.conf to /etc/postgresql/8.4/main...
Moving configuration file /var/lib/postgresql/8.4/main/pg_hba.conf to /etc/postgresql/8.4/main...
Moving configuration file /var/lib/postgresql/8.4/main/pg_ident.conf to /etc/postgresql/8.4/main...
Configuring postgresql.conf to use port 5432...
Disabling connections to the new cluster during upgrade...
Roles, databases, schemas, ACLs...
Fixing hardcoded library paths for stored procedures...
Upgrading database mixged...
Analyzing database mixged...
Fixing hardcoded library paths for stored procedures...
Upgrading database te...
Analyzing database te...
Fixing hardcoded library paths for stored procedures...
Upgrading database webdav_prod...
Analyzing database webdav_prod...
Fixing hardcoded library paths for stored procedures...
Upgrading database postgres...
Analyzing database postgres...
Fixing hardcoded library paths for stored procedures...
Upgrading database template1...
Analyzing database template1...
Re-enabling connections to the old cluster...
Re-enabling connections to the new cluster...
Copying old configuration files...
Copying old start.conf...
Stopping target cluster...
Stopping old cluster...
Disabling automatic startup of old cluster...
Configuring old cluster to use a different port (5432)...
Starting target cluster on the original port...
Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with

  pg_dropcluster 8.3 main
mixvir:/etc/postgresql/8.3/main# pg_dropcluster 8.3 main

Bonne migration !