Modifications pour le document Mettre à jour pgsql sur pgsql-prod

Modifié par Gaetan RETEL le 2025/10/05 00:22

Depuis la version 7.1
modifié par Gaetan RETEL
sur 2025/03/12 04:24
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 11.1
modifié par Gaetan RETEL
sur 2025/03/12 14:07
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -3,16 +3,14 @@
3 3  Les commandes listées ci dessous seront celles de la version que j'ai installée.
4 4  
5 5  
6 -
7 -
8 8  {{toc/}}
9 9  
10 10  
11 -
12 12  
13 13  
14 14  == Précautions à prendre ==
15 15  
13 +
16 16  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}}. Il va falloir 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.
17 17  
18 18  {{warning}}
... ... @@ -47,21 +47,16 @@
47 47  )))
48 48  )))
49 49  
48 +{{info}}
49 +Vous pouvez voir s'il est nécessaire d'installer de nouveaux packages pour la version que vous voulez installer en tapant {{code language="none"}}dpkg -l | grep postgresql{{/code}}
50 +{{/info}}
50 50  
51 -(% class="wikigeneratedid" %)
52 -Pour vérifier les packages installés, utilisez la commande
53 53  
54 -(% class="box" %)
55 -(((
56 -(% class="box" %)
57 -(((
58 -dpkg -l | grep postgresql
59 -)))
60 -)))
61 61  
62 62  
63 63  == Préparation des nouveaux clusters ==
64 64  
57 +
65 65  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.
66 66  
67 67  {{info}}
... ... @@ -78,9 +78,9 @@
78 78  )))
79 79  )))
80 80  
81 -Si comme moi, vous n'avez jamais touché à postgreSQL, la commande pour sortir du terminal est \q
74 +Si vous n'avez jamais touché à postgreSQL, la commande pour sortir du terminal est \q
82 82  
83 -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
76 +Ici, l'encodage est UTF-8 et le reste en C. Pour créer un cluster "main" utilisant pgsql 14 la commande est donc
84 84  
85 85  (% class="box" %)
86 86  (((
... ... @@ -91,6 +91,7 @@
91 91  )))
92 92  
93 93  
87 +
94 94  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]].
95 95  
96 96  
... ... @@ -104,7 +104,7 @@
104 104  )))
105 105  )))
106 106  
107 -vous pouvez vous assurer avec la commande suivante que tout est bien à l'arrêt, sinon {{code language="none"}}pg_upgrade{{/code}}  retournera des erreurs :
101 +Vous pouvez vous assurer avec la commande suivante que tout est bien à l'arrêt, sinon {{code language="none"}}pg_upgrade{{/code}}  retournera des erreurs :
108 108  
109 109  (% class="box" %)
110 110  (((
... ... @@ -123,33 +123,18 @@
123 123  
124 124  Si vous voyez une ligne avec une tâche lancée par postgres, il faut l'arrêter. Voilà quelques commandes utiles :
125 125  
126 -La commande suivante permet de stopper (ou de démarrer avec {{code language="none"}}start{{/code}}) un cluster spécifique d'une version pgsql donnée :
127 127  
128 -(% class="box" %)
129 -(((
130 -(% class="box" %)
131 -(((
132 -pg_ctlcluster 13 main stop
133 -)))
134 -)))
121 +La commande suivante permet de stopper un cluster spécifique d'une version pgsql donnée : {{code language="none"}}pg_ctlcluster 13 main stop{{/code}}  (% id="cke_bm_63735S" style="display:none" %) (%%)(ou de démarrer avec {{code language="none"}}start{{/code}})
135 135  
136 -Si pour une raison qui vous échappe il y a toujours des tâches liés à postgres/des clusters qui tournent, vous pouvez forcer leur arrêt avec cette commande en indiquant leur PID (dans l'exemple avec root donné plus tôt, le PID est 5860)
123 +S'il y a toujours des tâches liés à postgres/des clusters qui tournent, vous pouvez forcer leur arrêt avec cette commande en indiquant leur PID (dans l'exemple avec root plus tôt, le PID est 5860) : {{code language="none"}}kill -9 <PID>{{/code}}
137 137  
138 -(% class="box" %)
139 -(((
140 -(% class="box" %)
141 -(((
142 -kill -9 <PID>
143 -)))
144 -)))
145 145  
146 -
147 147  Une fois les processus stoppés, on peut lancer la commande.
148 148  
149 149  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.
150 150  
151 151  
152 -Avant de lancer la commande, on notera l'existence du flag ~-~-check, dont on ne manquera pas de se servir.
131 +Avant de lancer la commande, on notera l'existence du flag {{code language="none"}}--check{{/code}}, dont on ne manquera pas de se servir.
153 153  
154 154  Pour la version 13 à 14, il faut donc taper pour lancer les vérifications :
155 155  
... ... @@ -167,13 +167,14 @@
167 167  )))
168 168  
169 169  
149 +
150 +
170 170  == Lancer l'upgrade ==
171 171  
172 -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.
173 173  
174 -Vérifiez une nouvelle fois que des tâches n'ont pas été redémarrées comme expliqué dans la précédente section.
154 +Si la commande avec le flag {{code language="none"}}--check{{/code}} à réussi, il n'y a plus qu'à la lancer sans. Pour autant, une erreur peut toujours survenir. Vérifiez une nouvelle fois que des tâches n'ont pas été redémarrées comme expliqué dans la précédente section.
175 175  
176 -Assurez-vous qu'il y ait suffisamment de place sur la VM, toujours avec {{code language="none"}}df -h{{/code}}, dans mon cas les nouveaux clusters ont pris ~~5G.
156 +Assurez-vous qu'il y ait suffisamment de place sur la VM, toujours avec {{code language="none"}}df -h{{/code}}, les nouveaux clusters de la version 14 ont pris ~~5G.
177 177  
178 178  {{error}}
179 179  Pour la suite, lisez bien TOUTES les infos avant de vous lancer dans les commandes des différents clusters, au risque de perdre des informations.
... ... @@ -199,11 +199,15 @@
199 199  {{/error}}
200 200  
201 201  
182 +
183 +
202 202  == Mise en place des nouveaux clusters ==
203 203  
186 +
187 +
204 204  Une fois les nouveaux clusters terminés et les données migrées, il va falloir terminer la configuration.
205 205  
206 -Ouvrez le fichier de configuration {{code language="none"}}pg_hba.conf{{/code}} de l'ancienne version, situé pour moi dans {{code language="none"}}/etc/postgresql/13/<cluster_name>/{{/code}}. À la fin du fichier, copiez la partie sur le login pour les BDDs, dont le début est indiqué par la ligne
190 +Ouvrez le fichier de configuration {{code language="none"}}pg_hba.conf{{/code}} de l'ancienne version, situé dans {{code language="none"}}/etc/postgresql/<old_version>/<cluster_name>/{{/code}}. À la fin du fichier, copiez la partie sur le login pour les BDDs, dont le début est indiqué par la ligne
207 207  
208 208  (% class="box" %)
209 209  (((
... ... @@ -210,7 +210,7 @@
210 210  # Database administrative login by Unix domain socket
211 211  )))
212 212  
213 -Collez ces informations au même endroit dans le fichier de la nouvelle version, {{code language="none"}}/etc/postgresql/14/<cluster_name>/pg_hba.conf{{/code}}.
197 +Collez ces informations au même endroit dans le fichier de la nouvelle version, {{code language="none"}}/etc/postgresql/<new_version>/<cluster_name>/pg_hba.conf{{/code}}.
214 214  
215 215  {{warning}}
216 216  N'oubliez pas de faire cette opérations pour chaque cluster
... ... @@ -217,15 +217,17 @@
217 217  {{/warning}}
218 218  
219 219  
220 -Si vous souhaitez garder les anciens clusters pour l'instant en cas de besoin, attribuez leurs des ports non utilisés. Parametrez les ports de nouveaux clusters pour qu'il correspondent aux ports des anciens, sinon les services utilisant pgsql-prod ne pourront plus se connecter à leur BDD.
221 221  
222 -Si vous souhaitez supprimer les anciens clusters, vous pouvez maintenant le faire en exécutant les fichiers {{code language="none"}}delete_old_cluster.sh{{/code}} qui ont été générés par {{code language="none"}}pg_upgrade{{/code}}. Ils ne contiennent que la commande {{code language="none"}}rm -rf '/var/lib/postgresql/<version>/<cluster_name>'{{/code}}.
205 +Si vous souhaitez garder les anciens clusters pour l'instant en cas de besoin, attribuez leurs des ports non utilisés. Paramétrez les ports de nouveaux clusters pour qu'il correspondent aux ports des anciens, sinon les services utilisant pgsql-prod ne pourront plus se connecter à leur BDD.
223 223  
207 +Si vous souhaitez supprimer les anciens clusters, vous pouvez maintenant le faire en exécutant les fichiers {{code language="none"}}delete_old_cluster.sh{{/code}} qui ont été générés par {{code language="none"}}pg_upgrade{{/code}}. Ils ne contiennent d'ailleurs que la commande {{code language="none"}}rm -rf '/var/lib/postgresql/<version>/<cluster_name>'{{/code}}.
224 224  
225 -Ouvrez ensuite le fichier {{code language="none"}}/etc/postgresql/14/<cluster_name>/postgresql.conf{{/code}} de la nouvelle version. Il faut configurer les ports des clusters, et autoriser les connexions.
226 226  
227 -Dans mon cas, le cluster main est au 5432 et le gitlab au 5433, donc dans {{code language="none"}}/etc/postgresql/14/gitlab/postgresql.conf{{/code}} je cherche et modifie la ligne :
228 228  
211 +Ouvrez ensuite le fichier {{code language="none"}}/etc/postgresql/<new_version>/<cluster_name>/postgresql.conf{{/code}} de la nouvelle version. Il faut configurer les ports des clusters, et autoriser les connexions.
212 +
213 +Dans ce cas, le cluster main est au 5432 et le gitlab au 5433, donc dans {{code language="none"}}/etc/postgresql/<new_version>/gitlab/postgresql.conf{{/code}} je cherche et modifie la ligne :
214 +
229 229  (% class="box" %)
230 230  (((
231 231  port = 5433
... ... @@ -243,8 +243,12 @@
243 243  {{/warning}}
244 244  
245 245  
232 +
233 +
246 246  == Mises à jour et optimisations ==
247 247  
236 +
237 +
248 248  Un fichier {{code language="none"}}update_extensions.sql{{/code}} a été généré par chaque commande {{code language="none"}}pg_upgrade{{/code}} lancée, on va maintenant pouvoir l'exécuter, ou lancer les commandes à la main. Pourquoi à la main ? Car de toute façon il est également fortement conseillé de ré-indexer les différentes BDDs de chaque clusters, ce qui demande d'accéder à toute les BDDs. Si l'envie vous prend de créer un script et automatiser ça, faites-vous plaisir.
249 249  
250 250  Il va donc falloir se rendre dans chaque cluster :
... ... @@ -269,7 +269,7 @@
269 269  )))
270 270  )))
271 271  
272 -Si pour ce cluster le fichier {{code language="none"}}update_extensions.sql{{/code}} indiquait une mise à jour d'extension, on peut en même temps copier coller la commande qui pourrait par exemple être :
262 +Si pour ce cluster le fichier {{code language="none"}}update_extensions.sql{{/code}} généré par {{code language="none"}}pg_upgrade{{/code}} pour ce cluster indiquait une mise à jour d'extension, on peut en même temps copier coller la commande qui pourrait par exemple être :
273 273  
274 274  (% class="box" %)
275 275  (((
... ... @@ -277,8 +277,12 @@
277 277  )))
278 278  
279 279  
270 +
271 +
280 280  == Redémarrer postgreSQL ==
281 281  
274 +
275 +
282 282  Une fois tout cela fait, il ne reste plus qu'à redémarrer postgreSQL :
283 283  
284 284  (% class="box" %)
... ... @@ -291,32 +291,19 @@
291 291  
292 292  On peut ensuite vérifier avec la commande {{code language="none"}}pg_lsclusters{{/code}} que les deux nouveaux clusters sont opérationnels.
293 293  
294 -Une commande utile pour le débogage est
295 295  
296 -(% class="box" %)
297 -(((
298 -(% class="box" %)
299 -(((
300 -lsof -i
301 -)))
302 -)))
303 303  
304 -Cette commande permet d'afficher les connexions actuelles. Il devrait y avoir parmi les résultats quelque chose du genre :
290 +Une commande utile pour le débogage est {{code language="none"}}lsof -i{{/code}}. Cette commande permet d'afficher les connexions actuelles. Il devrait y avoir parmi les résultats quelque chose du genre :
305 305  
306 306  (% class="box" %)
307 307  (((
308 -postgres  220900 postgres    5u  IPv4 4457404      0t0  TCP *:postgresql (LISTEN)
294 +postgres  220900 postgres    5u  IPv4 4457404      0t0  TCP *:postgresql (LISTEN)  # pour le port par défaut (5432) de postgres
309 309  postgres  220900 postgres    6u  IPv6 4457405      0t0  TCP *:postgresql (LISTEN)
310 310  
311 -postgres  220901 postgres    5u  IPv4 4457515      0t0  TCP *:5433 (LISTEN)
297 +postgres  220901 postgres    5u  IPv4 4457515      0t0  TCP *:5433 (LISTEN)  # pour le cluster gitlab au 5433
312 312  postgres  220901 postgres    6u  IPv6 4457516      0t0  TCP *:5433 (LISTEN)
313 -)))
314 314  
315 -et également les machines et VM connectés, par exemple
316 -
317 -(% class="box" %)
318 -(((
319 -postgres  414816 postgres    9u  IPv4 7792005      0t0  TCP pgsql-prod.prod.infra.atilla.org->gitlab-prod.prod.infra.atilla.org (ESTABLISHED)
300 +postgres  414816 postgres    9u  IPv4 7792005      0t0  TCP pgsql-prod.prod.infra.atilla.org->gitlab-prod.prod.infra.atilla.org (ESTABLISHED)  # pour les machines et VM connectés, exemple avec le gitlab
320 320  )))
321 321  
322 322  {{success}}
... ... @@ -324,7 +324,7 @@
324 324  {{/success}}
325 325  
326 326  {{info}}
327 -Dans le cas de ce wiki, il y a eu des problèmes avec la macro children. Après un redémarrage de tomcat9 sur xwiki-prod et une mise à jour via une connexion avec le compte défaut de superadmin, le problème s'est résolu. Impossible de savoir laquelle des deux actions a résolu ledit problème, elles ont été faite en même temps.
308 +Dans le cas de ce wiki, il y a eu des problèmes avec la macro children après passage sur pgsql 14. Après un redémarrage de tomcat9 sur xwiki-prod et une mise à jour via une connexion avec le compte admin (cf le teampass), le problème s'est résolu. Impossible de savoir laquelle des deux actions a résolu ledit problème, elles ont été faite en même temps.
328 328  {{/info}}
329 329  
330 330  (% class="wikigeneratedid" %)