Aller au contenu

Recharger un dump

Cette copie sert à remettre une machine sur pied : toute la base, tous les lecteurs, dans un volume vide. Le fichier d’un seul lecteur se restaure, lui, depuis l’interface, comme l’explique Restaurer un export.

Fenêtre de terminal
export PGPASSWORD=$(grep -m1 '^POSTGRES_PASSWORD=' .env | cut -d= -f2-)
docker compose down
docker volume rm badlen_pgdata
docker compose up -d --wait db
docker run --rm -i --network badlen_default -e PGPASSWORD postgres:18-alpine \
psql -h db -U badlen -d badlen -v ON_ERROR_STOP=1 < badlen-2026-08-01.sql
docker run --rm --network badlen_default -e PGPASSWORD postgres:18-alpine \
psql -h db -U badlen -d badlen -tAc \
'select (select count(*) from "User"), (select count(*) from "Account"), (select count(*) from "Transaction")'
docker compose up -d app

La première ligne est aussi celle par laquelle commençait le dump. Elle est répétée ici parce qu’on restaure généralement dans un terminal ouvert longtemps après la sauvegarde, où la variable que transmet -e PGPASSWORD n’existe pas. Vous obtenez alors password authentication failed for user "badlen", qui fait penser à un mauvais mot de passe dans .env, alors qu’il manque simplement l’export dans ce shell.

--wait est nécessaire parce que le volume que vous venez de supprimer contenait toutes les données de la base : à ce démarrage, PostgreSQL recrée son cluster de zéro, ce qui prend une dizaine de secondes pendant lesquelles le conteneur tourne mais le serveur n’écoute pas encore. Sans cette option, up -d vous rend la main dès que le conteneur existe, et psql se heurte à Connection refused.

ON_ERROR_STOP=1 est tout aussi nécessaire : sans lui, psql affiche chaque erreur mais se termine quand même avec le code 0, et une restauration qui a échoué en cours de route a l’air réussie.

Le décompte joue pour la restauration le rôle de la marque de fin pour le dump, et il se fait avant de démarrer l’application, pas après : lecteurs, comptes, opérations. Trois zéros, ou une erreur signalant une relation inexistante, signifient que rien n’a été restauré. Si vous démarrez l’application sur une base vide, elle applique les migrations et affiche une page d’inscription, exactement comme lors d’une première installation.

Si l’instance dans laquelle vous restaurez utilise une autre SECRET_ENCRYPTION_KEY, lisez Restaurer sous une autre clé avant de vous connecter : deux informations reviennent illisibles, dont l’une vous sert justement à vous connecter.