Modifications pour le document Mettre à jour pgsql sur pgsql-prod
Modifié par Gaetan RETEL le 2025/03/28 20:16
Depuis la version 1.2
modifié par Gaetan RETEL
sur 2025/03/11 23:33
sur 2025/03/11 23:33
Commentaire de modification :
Update document after refactoring.
À la version 2.1
modifié par Gaetan RETEL
sur 2025/03/12 01:58
sur 2025/03/12 01:58
Commentaire de modification :
Il n'y a aucun commentaire pour cette version
Résumé
-
Propriétés de la Page (1 modifications, 0 ajouts, 0 suppressions)
Détails
- Propriétés de la Page
-
- Contenu
-
... ... @@ -1,0 +1,129 @@ 1 +Après avoir galéré sur la mise à jour de postgreSQL sur [[pgsql-prod>>doc:Services.PostgreSQL.WebHome]], j'ai décidé de noter ici les étapes à suivre pour une upgrade sans histoire. 2 + 3 +Les commandes listées ci dessous seront celle de la version que j'ai installé. 4 + 5 + 6 +=== Précautions à prendre === 7 + 8 +Avant de toucher à la BDD on va évidemment faire une sauvegarde, pour pouvoir remettre en état en cas de pépin. Pour cela on peut utiliser {{code language="none"}}pg_dumpall{{/code}}. Pour cela on va faire deux sauvegarde, une avec le flag {{code language="none"}}--globals-only{{/code}} pour récupérer les users/roles/etc, et une autre pour récupérer les BDDs. 9 + 10 +(% class="box warningmessage" %) 11 +((( 12 +Attention, la commande pg_dumpall ne fait qu'un dump du cluster par défaut (port 5432), il va donc falloir l'exécuter pour chaque cluster 13 +))) 14 + 15 +(% class="wikigeneratedid" %) 16 +Pour voir les différents clusters présents, utiliser la commande {{code language="none"}}pg_lsclusters{{/code}}. La sortie inclura plusieurs information importantes, comme la version pgsql utilisé par chaque cluster, et son port. 17 + 18 +(% class="wikigeneratedid" %) 19 +Pour vérifier qu'il y a de la place sur la VM on peut utiliser {{code language="none"}}df -h{{/code}} et regarder la place sur ce qui est monté sur / , le dump des BDD du cluster main faisait 1.3G dans mon cas. 20 + 21 +(% class="box" %) 22 +((( 23 +(% class="box" %) 24 +((( 25 +su - postgres -c "pg_dumpall -U postgres -p 5432" > /var/backups/pgsql_main_backup.sql 26 + 27 +su - postgres -c "pg_dumpall ~-~-globals-only -U postgres -p 5432" > /var/backups/pgsql_main_globals_backup.sql 28 +))) 29 +))) 30 + 31 +(% class="box warningmessage" %) 32 +((( 33 +Penser à copier les sauvegardes sur une autre machine en cas de problème sur la VM, on ne sait jamais. Pour la copier sur votre machine dans pgsql/ utiliser par exemple : 34 +))) 35 + 36 +(% class="box" %) 37 +((( 38 +(% class="box" %) 39 +((( 40 +scp -J root@atilla.org pgsql-prod.prod.infra:/var/backups/pgsql_main_backup.sql ./pgsql/ 41 +))) 42 +))) 43 + 44 + 45 +(% class="wikigeneratedid" %) 46 +Pour vérifier les packages installés, utiliser la commande 47 + 48 +(% class="box" %) 49 +((( 50 +(% class="box" %) 51 +((( 52 +dpkg -l | grep postgresql 53 +))) 54 +))) 55 + 56 + 57 +=== Préparation des nouveaux clusters === 58 + 59 +pour créer les nouveaux clusters, il faut commencer par regarder comment sont faits les anciens, pour qu'ils soient compatibles entre eux. L'encodage et le collationnement/type de caractères doivent être identiques. 60 + 61 +(% class="box infomessage" %) 62 +((( 63 +on peut trouver les informations nécessaires en affichant les BDDs de chaque clusters : 64 +))) 65 + 66 +(% class="box" %) 67 +((( 68 +(% class="box" %) 69 +((( 70 +sudo -u postgres psql -p 5432 71 + 72 +\l 73 +))) 74 +))) 75 + 76 +Si comme moi vous n'avez jamais touché à postgreSQL, la commande pour sortir du terminal est \q 77 + 78 +Dans mon cas, l'encodage est UTF-8 et le reste en C. Pour créer un cluster "main" utilisant pgsql 14 la commande est donc 79 + 80 +(% class="box" %) 81 +((( 82 +(% class="box" %) 83 +((( 84 +pg_createcluster ~-~-locale=C ~-~-encoding=UTF8 14 main 85 +))) 86 +))) 87 + 88 + 89 +On va utiliser la commande {{code language="none"}}pg_upgrade{{/code}} pour migrer les données, il va falloir utiliser pas mal de flags avec des arguments, n'oubliez pas de [[lire la doc>>https://www.postgresql.org/docs/15/pgupgrade.html]]. 90 + 91 +Pour passer de la version x à la version y, il faut le path des dossiers des exécutables et de data des version x et y, ainsi que le path du fichier .conf de postgres de chaque version. 92 + 93 + 94 +Avant de lancer la commande, on notera l'existence du flag ~-~-check, dont on ne manquera pas de se servir. 95 + 96 +Pour la version 13 à 14, il faut donc taper pour lancer les vérifications 97 + 98 +(% class="box" %) 99 +((( 100 +(% class="box" %) 101 +((( 102 +/usr/lib/postgresql/14/bin/pg_upgrade -b /usr/lib/postgresql/13/bin -B /usr/lib/postgresql/14/bin -d /var/lib/postgresql/13/main -D /var/lib/postgresql/14/main -o '-c config_file=/etc/postgresql/13/main/postgresql.conf' -O '-c config_file=/etc/postgresql/14/main/postgresql.conf' ~-~-check 103 +))) 104 +))) 105 + 106 +(% class="box infomessage" %) 107 +((( 108 +À ce stade là s'il y a des problèmes, google est votre ami. 109 +))) 110 + 111 + 112 +=== Lancer l'upgrade === 113 + 114 +Si la commande avec le flag ~-~-check à réussi, il n'y a plus qu'à la lancer sans. Pour autant, une erreur peut toujours survenir. 115 + 116 +(% class="box errormessage" %) 117 +((( 118 +Pour la suite, lisez bien TOUTES les infos avant de vous lancer dans les commandes des différents clusters, sinon vous risquez de devoir recommencer. 119 +))) 120 + 121 +(% class="box" %) 122 +((( 123 +(% class="box" %) 124 +((( 125 +/usr/lib/postgresql/14/bin/pg_upgrade -b /usr/lib/postgresql/13/bin -B /usr/lib/postgresql/14/bin -d /var/lib/postgresql/13/main -D /var/lib/postgresql/14/main -o '-c config_file=/etc/postgresql/13/main/postgresql.conf' -O '-c config_file=/etc/postgresql/14/main/postgresql.conf' 126 +))) 127 +))) 128 + 129 +