GeotrekCE / Geotrek-admin

Paths management for National Parks and Tourism organizations
https://geotrek.fr
BSD 2-Clause "Simplified" License
136 stars 76 forks source link

Migration BDD vers Postgis3 #2600

Closed JeanLenormand closed 3 years ago

JeanLenormand commented 3 years ago

J'essai de migrer une bdd GTA d'une instance postgre11/postgis2.4 vers une instance postgre12/postgis3. Lors du pg-restore, il semble y avoir un problème avec Postgis 3.

Voici ma config : GTA v2.52.1 en local sur Ubuntu 18.04

Voici les cmd effectuées : sudo apt-get update sudo apt-get -y install postgresql-12 postgresql-12-postgis-3 pg_lsclusters (pg11 sur le port 5432 & pg12 sur le port 5433) sudo pg_ctlcluster 11 main stop sudo su postgres psql -p 5433 ->CREATE USER myuser PASSWORD 'mypw'; ->CREATE DATABASE mydb OWNER myuser ENCODING 'UTF8' TEMPLATE template0; ->CREATE EXTENSION postgis; ->CREATE EXTENSION postgis_raster; ->exit ->exit sudo -u postgres pg_restore -v -p 5433 -d mydb mydb-en-pg11.backup

J'ai mis le log en pièce jointe ainsi qu'un export des tâches qui ont été effectuées lors du pg_restore.

Si quelqu'un a des pistes je suis preneur !! :)

Merci.

Jean

postgresql-12-main.log pg_restoreBUG.txt

camillemonchicourt commented 3 years ago

Il y a en effet une erreur avec le type public.raster identifiée dans les logs. Pourtant tu as bien créé l'extension postgis_raster au préalable, nécessaire depuis PostGIS 3. Du coup je ne vois pas ce que ça peut être.

mviadere-openig commented 3 years ago

Salut, je sais pas si ça peut te donner des pistes, voici mes notes pour la maj d'une bdd d'un cluster de postgres à un autre.

maj_cluster_postgre_postgis.txt

JeanLenormand commented 3 years ago

@mviadere-openig merci pour ton retour. J'ai suivi ton doc et la référence que tu as utilisée (../README.Debian) mais je reviens au même problème : sudo pg_dropcluster 12 main --stop sudo pg_upgradecluster 11 main (en pièce jointe le retour de cette cmd)

Après un "sudo dpkg-reconfigure geotrek-admin" j'ai tenté d'ajouter un POIs -> Server Error (500) + redémarrage de la machine qui a planté.. Le log de postgre est aussi en pièce jointe.

pg_upgradeBUG.txt postgresql-12-mainSUITE.log

gutard commented 3 years ago

De mémoire la méthode avec pg_upgradecluster ne marche pas si en parallèle on passe de Postgis 2 à Postgis 3. Il faut passer par un hard upgrade, c'est à dire un dump/restore. Apparemment il faut plutôt faire un dump au format custom (avec l'option -Fc). Cf. https://postgis.net/docs/manual-3.0/postgis_installation.html#hard_upgrade

claudep commented 3 years ago

Par défaut, pg_upgradecluster fait un hard upgrade. Selon la page de manuel:

-m, --method=dump|upgrade
    Specify the upgrade method. "dump" uses pg_dump(1) and pg_restore(1), "upgrade" uses pg_upgrade(1). The default is "dump".
JeanLenormand commented 3 years ago

Merci pour vos retours. Je rebondis sur la procédure indiquée dans le lien de @gutard pour faire un hard upgrade. Mais le script perl postgis_restore.pl est introuvable. Sauriez-vous me dire où je peux le trouver ou comment l'installer ? J'ai perl 5, version 26 installée sur ma machine.

gutard commented 3 years ago

sudo su postgres psql -p 5433

Tu es connecté dans la base postgresql

->CREATE USER myuser PASSWORD 'mypw'; ->CREATE DATABASE mydb OWNER myuser ENCODING 'UTF8' TEMPLATE template0;

Tu as créé une base mydb mais tu es toujours connecté dans la base postgresql

->CREATE EXTENSION postgis; ->CREATE EXTENSION postgis_raster;

L'extension postgis_raster est créée dans la base postgres et non dans la base mydb.

Après les CREATE DATABASE il faudrait faire \c mydb pour changer de base.

JeanLenormand commented 3 years ago

Merci @gutard en effet, je n'avais pas changé de base... Je vais revoir mes fondamentaux. Problème résolu.

mviadere-openig commented 3 years ago

@JeanLenormand par curiosité, est-ce que la création de tronçons et d'évènements fonctionnent ?

JeanLenormand commented 3 years ago

@mviadere-openig oui tout fonctionne. Que ce soit la création ou la modification de tronçons et d'évènements existants.