J'utilise une distribution GNU/Linux Debian Sarge avec un backport officiel de PostgreSQL 8.1 sur un serveur de test. Tout fonctionnait à merveille jusqu'au jour où la connexion psql m'a été refusée. La justification de l'impossibilité de connexion était relative à un XID Wraparound, comprendre un rebouclage des identifiants de transactions, par suite de manque de vacuum full sur deux bases. Ayant déjà été confronté au problème par le passé, je me suis donc rué sur la procédure que j'avais tantôt décrite...

Quelle ne fut pas ma surprise lorsque je vis que mon PGDATA=/etc/postgresql/8.1/main postgres -O -P ma_base ne fonctionnait pas.... Après plusieurs tentatives, recherches et essais, il fallait modifier certains paramètres dans le fichier /etc/postgresql/8.1/main/postgresql.conf. Voici donc la liste de varibales de configuration à modifier :

  1. Forcer le répertoire de données data_directory = '/var/lib/postgresql/8.1/main/'
  2. Forcer le répertoire de dépot du fichier pid : external_pid_file = '/var/run/postgresql/postmaster.pid'
Une fois ces variables modifiées, la commande PGDATA=/etc/postgresql/8.1/main postgres -O -P ma_base a fonctionné, j'ai pu exécuter mes VACUUM FULL ANALYZE sur mes deux bases et reprendre le travail.

Notez que ces modifications n'altèrent en rien le fonctionnement serveur de PostgreSQL 8.1 (backport) en Debian Sarge et que le service peut être relancé directement après l'opération « single user »