Utiliser pg_dump avec Docker
Je suis en train de migrer Tiny Tiny RSS depuis AWS vers un serveur dédié. Pour ce faire j'essaie d'effectuer un dump de la base de donnée (stockée dans RDS) depuis une machine Debian Buster. Malheureusement pg_dump
échoue car la version fournie par Debian est trop ancienne !
% pg_dump -h db2.ezvan.fr -U ttrss -W ttrss > ttrss-20220102.sql
Password:
pg_dump: server version: 12.7; pg_dump version: 11.14 (Debian 11.14-0+deb10u1)
pg_dump: aborting because of server version mismatch
zsh: exit 1 pg_dump -h db2.ezvan.fr -U ttrss -W ttrss > ttrss-20220102.sql
Docker à la rescousse
Je pourrais mettre à jour ma version de Debian pour obtenir un version plus récente de pg_dump
, mais une telle migration serait chronophage. Une solution plus simple est d'utiliser Docker pour exécuter la version de pg_dump
qui convient.
Installation de Docker
Attention sous Debian le nom du paquet Docker est docker.io
!
sudo apt install docker.io
J'ajoute mon utilisateur au groupe docker. Je me reconnecte ensuite afin d'utiliser les nouvelles permissions.
sudo usermod -aG docker user
Je démarre le démon Docker.
sudo systemctl start docker
Lancer pg_dump
Je lance pg_dump
dans un conteneur Docker. J'utilise l'image postgres
en spécifiant la version 12. Vous pouvez trouver la documentation de l'image sur Docker Hub.
docker run -i --rm postgres:12 pg_dump -h db2.ezvan.fr -U ttrss -W ttrss > ttrss-20220102.sql
J'utilise le paramètre -i
pour pouvoir entrer un mot de passe si nécessaire. Attention, ne pas utiliser le paramètre -t
, car cela peut faire échouer le dump car les caractères fin de ligne (EOL) sont interprétés et bloquent la commande.