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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
  volumes:
      - /DBData/iamictv:/var/lib/postgresql/data:Z
      - /DBData/wal:/var/lib/postgresql/wal:Z
Si je passe le paramètre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
archive_command = 'cp %p /DBData/wal/MonInstance_%f'
je vais logiquement me retrouver avec un message d'erreur
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
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
 archive_command = 'cp %p /var/lib/postgresql/wal/inst1_%f'
... 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
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
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)

Pourtant, autant mon /DBData/wal semble avoir des droits suffisants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
drw-rw-rw-.  2 systemd-bus-proxy root    46 May  6 10:39 wal
autant il semble en être de même à l'intérieur du container
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