Aussitôt le achive_mode passé à on, nous avons les journaux (wal) qui déboulent dans $PGDATA/pg_wal
Il convient donc de les copier ailleurs afin de les sauvegarder, et cela se fait habituellement grace au paramètre archive_command.
En environnement dockerisé, cette façon de faire se corse un peu.
Dans mon container docker, j'ai donc
/var/lib/postgresql/data/pg_wal contenant mes wal
J'ai externalisé mon PGDATA via mon fichier docker-compose, ainsi que le répertoire dans lequel je souhaite copier mes wal
Si je passe le paramètre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3volumes: - /DBData/iamictv:/var/lib/postgresql/data:Z - /DBData/wal:/var/lib/postgresql/wal:Z
je vais logiquement me retrouver avec un message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part archive_command = 'cp %p /DBData/wal/MonInstance_%f'
Cela me semble assez logique car c'est Postgresql qui initie la commande cp depuis l'intérieur du container... et le container ne connais pas /DBData... C'et donc dans cette même logique que je modifie mon postgresql.conf de telle sorte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cp: cannot create regular file '/DBData/wal/inst1_000000010000000000000028': No such file or directory 2020-05-06 10:44:16.983 CEST [29] LOG: archive command failed with exit code 1
... et là, bizarre... le chemin semble être trouvé, mais avec un problème de permission
Code : Sélectionner tout - Visualiser dans une fenêtre à part archive_command = 'cp %p /var/lib/postgresql/wal/inst1_%f'
si je me situe dans le container et que je joue l'ordre de copie, tout se passe pourtant bien (pas trop étonnant puisque je suis root)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 2020-05-06 10:46:04.538 CEST [30] DETAIL: The failed archive command was: cp pg_wal/00000001000000000000002A /var/lib/postgresql/wal/inst_00000001000000000000002A cp: failed to access '/var/lib/postgresql/wal/iamictv_00000001000000000000002A': Permission denied
Pourtant, autant mon /DBData/wal semble avoir des droits suffisants
autant il semble en être de même à l'intérieur du container
Code : Sélectionner tout - Visualiser dans une fenêtre à part drw-rw-rw-. 2 systemd-bus-proxy root 46 May 6 10:39 wal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [root@postgresql-t01 inst1]# docker exec -it inst1 bash root@2cbfa089fb65:/# ls -l /var/lib/postgresql/ total 4 drwx------. 19 postgres root 4096 May 6 10:57 data drw-rw-rw-. 2 postgres root 46 May 6 10:39 wal
Partager