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
Commentaire de modification : Update document after refactoring.
À la version 2.1
modifié par Gaetan RETEL
sur 2025/03/12 01:58
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

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 +