Migration postgresql 9.4 to 9.6 impossible

Bonjour à tous,

J’essaie depuis quelques mois de réaliser la migration postgresql 9p4 to 9p6 qui suit la maj 3.0. Celle ci refuse de s’exécuter.

2019-01-23 21:47:28,156: WARNING - Application de la migration 5 postgresql_9p4_to_9p6…
2019-01-23 21:47:28,309: ERROR - La migration 5 postgresql_9p4_to_9p6 a échoué avec l’exception [Errno 2] No such file or directory: ‘/var/lib/postgresql/9.4’, annulation
Traceback (most recent call last):
File “/usr/lib/moulinette/yunohost/tools.py”, line 884, in tools_migrations_migrate
migration.migrate()
File “/usr/lib/moulinette/yunohost/data_migrations/0005_postgresql_9p4_to_9p6.py”, line 25, in migrate
if not space_used_by_directory("/var/lib/postgresql/9.4") > free_space_in_directory("/var/lib/postgresql"):
File “/usr/lib/moulinette/yunohost/utils/filesystem.py”, line 28, in space_used_by_directory
stat = os.statvfs(dirpath)
OSError: [Errno 2] No such file or directory: ‘/var/lib/postgresql/9.4’

Il fût un temps j’avais essayé d’installer l’application yunohost pgadmin non officielle qui n’a jamais été opérationnelle sur mon serveur. Je me demande si elle n’a pas foutu le bazar dans mes paquets postgresql… J’ai lancé apt install postgresql-server-dev-9.6 et apt install postgresql, le système me répond que les paquets sont déjà installés mais il souhaite toujours effectuer une maj 9.4 à 9.6.
.
Quelqu’un a-t-il une idée ? Le reste du système fonctionne correctement et les maj se font (hors migrations évidemment).

J’imagine que du coup tu n’as pas vraiment d’app qui utilise postgresql … bien que j’n’en soit pas vraiment sur (mais je pense que sinon, le dossier /var/lib/postgresql/9.4 existerait)

A mon avis je tenterais un : apt remove postgresql-9.4

Salut Aleks! Merci pour ta réponse.

Alors effectivement en dehors d’un serveur plex / des sites web / du torrent / pihole et nextcloud. Aucun utilise postgre sql à ma connaissance. En soi, cela me dérangerait pas si cette migration ne se faisait pas. Par contre je suppose que ça bloque les suivantes? Y a-t-il un moyen de forcer le passage?

J’ai essayé apt remove postgresql-9.4, cela me dit que le paquet n’existe pas. Quand j’essaye de l’installer, on me répond que le paquet n’est pas disponible. Quand je teste apt remove postgresql-9.6, j’ai 3 paquets installés: postgresql postgresql-9.6 postgresql-contrib-9.6.
Bref, quels sont les paquets nécessaires pour que la migration soit réussie?

Hm je réalise que c’est effectivement un bug dans YunoHost dans la façon dont il detecte si un paquet (ici : postgresql-9.4) est installé. J’imagine que si tu fais dpkg --list | grep postgresql-9.4, tu trouves une ligne, mais que celle-ci ne commence pas par ii (au tout début) ?

Je pense que tu peux fixer le bug chez toi de la façon suivante :

  • Ouvre le fichier correspondant à la migration avec nano /usr/lib/moulinette/yunohost/data_migrations/0005_postgresql_9p4_to_9p6.py
  • Descend tout en bas pour trouver une ligne qui devrait être :
p = subprocess.Popen("dpkg --list | grep -q -w {}".format(package_name), shell=True)
  • Modifie cette ligne en rajoutant le | grep "^ii " comme ceci :
p = subprocess.Popen("dpkg --list | grep '^ii ' | grep -q -w {}".format(package_name), shell=True)
  • Enregistre les modifications avec Ctrl+X (puis Y pour valider)

Si ça marche, je vais patcher yunohost de sorte à ce que le probleme soit résolu en 3.4 :wink:

Au tooopp! T’es un bon ! :DD ça a presque marché du premier coup!
Il suffisait de retirer les guillemets délimitant ^ii. Donc il suffisait de mettre ceci:

p = subprocess.Popen("dpkg --list | grep ^ii  | grep -q -w {}".format(package_name), shell=True)

Merci encore une fois, j’ai pu passer à la migration suivante!