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

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

Depuis 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
À la version 1.1
modifié par Gaetan RETEL
sur 2025/03/11 23:31
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Titre
... ... @@ -1,1 +1,1 @@
1 -Mettre à jour pgsql sur pgsql-prod
1 +Mettre à jour postgresql sur pgsql-prod
Contenu
... ... @@ -1,129 +1,0 @@
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 -