Version 2.1 par Gaetan RETEL le 2025/03/12 01:58

Afficher les derniers auteurs
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