Aller au contenu

Recharger un dump

C’est la copie qui remet une machine debout : toute la base, tous les lecteurs, dans un volume vide. Le fichier d’un seul lecteur repasse par l’interface, sous 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 est celle par laquelle le dump avait commencé, et elle est répétée plutôt que supposée : une restauration se fait dans un terminal ouvert longtemps après la prise de la sauvegarde, et -e PGPASSWORD transmet une variable qui n’y est pas. Ce que vous obtenez alors est password authentication failed for user "badlen", qui se lit comme un mauvais mot de passe dans .env plutôt que comme un export absent de ce shell.

--wait n’est pas une politesse. Le volume que vous venez de supprimer était tout le domicile des données de la base, c’est donc le démarrage où elle crée son cluster à partir de rien, et cela prend une dizaine de secondes pendant lesquelles le conteneur est levé et le serveur n’écoute pas. Sans elle, up -d vous rend la main dès que le conteneur existe et psql tombe sur Connection refused.

ON_ERROR_STOP=1 compte tout autant : sans lui, psql rapporte chaque erreur et sort quand même en 0, et une restauration qui a échoué en chemin ressemble à une qui a marché.

Le décompte est à la restauration ce que la marque de complétion est au dump, et il vient avant l’application plutôt qu’après elle : lecteurs, comptes, opérations. Trois zéros, ou une erreur nommant une relation qui n’existe pas, veulent dire que rien n’a été restauré. Levez l’application sur une base vide et elle applique les migrations et sert une page d’inscription, ce qui ressemble exactement à une première installation, la seule chose à quoi une restauration n’est pas censée ressembler.

Si l’instance dans laquelle vous restaurez porte une SECRET_ENCRYPTION_KEY différente, lisez Restaurer sous une autre clé avant de vous connecter : deux choses reviennent illisibles, et l’une des deux est votre moyen d’entrer.

Confidentialité