Bonjour à tous,
Récemment passé à F 30 via dnf-system-upgrade, je bloque sur la mise à jour du serveur postgresql, de la version 10 à 11.
— Symptômes :
# systemctl status postgresql.service
● postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2019-05-08 15:58:45 CEST; 6min ago
Process: 14363 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=1/FAILURE)
mai 08 15:58:45 samsung-F30 systemd[1]: Starting PostgreSQL database server...
mai 08 15:58:45 samsung-F30 postgresql-check-db-dir[14363]: An old version of the database format was found.
mai 08 15:58:45 samsung-F30 postgresql-check-db-dir[14363]: Use 'postgresql-setup --upgrade' to upgrade to version '11'
mai 08 15:58:45 samsung-F30 postgresql-check-db-dir[14363]: See /usr/share/doc/postgresql/README.rpm-dist for more information.
mai 08 15:58:45 samsung-F30 systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
mai 08 15:58:45 samsung-F30 systemd[1]: postgresql.service: Failed with result 'exit-code'.
mai 08 15:58:45 samsung-F30 systemd[1]: Failed to start PostgreSQL database server.
Comme indiqué, on lance la sauvegarde :
# postgresql-setup --upgrade
* Upgrading database.
ERROR: pg_upgrade tool failed
ERROR: Upgrade failed.
* See /var/lib/pgsql/upgrade_postgresql.log for details.
La dernière ligne de ce log renvoie vers un autre log qui décrit l’erreur :
pg_dump: [programme d'archivage (db)] échec de la requête : ERROR: could not access file "$libdir/postgis-2.4": Aucun fichier ou dossier de ce type
La raison est qu’une de mes bases utilise des extensions de Postgis et que le passage de la version 2.4 à la 2.5 plante : les bibliothèques indispensables à la 2.4 ne sont plus présentes dans F 30.
En cherchant un peu sur l’Internet, on trouve
ceci qui nous invite à ces quelques étapes :
— tout d’abord, télécharger le RPM de postgis 2.4 pour en extraire les bibliothèques nécessaires.
https://fedora.pkgs.org/29/fedora-x86_64/postgis-2.4.3-5.fc29.x86_64.rpm.html
— On récupère les fichiers dont on a besoin :
[tmpdir] $ rpm2cpio *.rpm | cpio -idmv
— Ensuite, on copie les fichiers relatifs à la 2.4 fraîchement téléchargés dans le répertoire suivant de la version précédente de Postgres :
/usr/lib64/pgsql/postgresql-10/lib
— Et la combine, dans le répertoire principal
/usr/lib64/pgsql
on crée des copies (ou des liens ?) des bibliothèques correspondantes de la version 2.5 en les renommant « 2.4 » :
# cp postgis_topology-2.5.so postgis_topology-2.4.so
À ce stade, la mise à jour devrait s’effectuer. Néanmoins, il se peut que, selon les extensions présentes dans vos bases, il y ait une nouvelle erreur :
pg_dump: [programme d'archivage (db)] échec de la requête : ERROR: could not load library "/usr/lib64/pgsql/postgresql-10/lib/postgis-2.4.so": libproj.so.12: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type
Il faut alors chercher ce fichier dans le rpm suivant :
https://fedora.pkgs.org/29/fedora-x86_64/proj-4.9.3-6.fc29.x86_64.rpm.html
… puis le copier là-dedans, à côté de la version 13 :
/usr/lib64/
Pour moi, ça s’est bien terminé après cette dernière étape.
Ne reste plus qu’à nettoyer les fichiers éparpillés partout :hammer:
Bon courage.