Save France
Backend

Manipulation de la base de données

Commandes et procédures pour sauvegarder, restaurer et vider la base PostgreSQL

Contexte

La base de données PostgreSQL est exécutée dans le conteneur db (voir Docker). Les commandes ci-dessous s'exécutent depuis la racine du projet avec make ou docker compose.

Pour plus de détails sur le schéma, voir Structure des données.


Commandes Make

Restaurer une base depuis un dump

Restaure la base à partir d'un fichier dump (format custom PostgreSQL compressé). Le schéma est recréé puis les données sont importées ; les migrations Doctrine sont réappliquées ensuite.

make db-restore

Avec un fichier dump personnalisé :

DUMP=/chemin/vers/mon.dump make db-restore

Par défaut : le fichier utilisé est save-france.dump à la racine du projet.

Étapes effectuées :

  1. Copie du dump dans le conteneur db
  2. DROP SCHEMA public CASCADE puis recréation du schéma
  3. pg_restore avec le rôle app
  4. Exécution des migrations Doctrine

Créer un dump de la base

Génère un dump complet de la base (format custom, compressé) et le copie à la racine sous le nom défini par DUMP.

make db-dump

Avec un nom de fichier personnalisé :

DUMP=backup-$(date +%Y%m%d).dump make db-dump

Par défaut : le fichier produit est save-france.dump.

Étapes effectuées :

  1. VACUUM FULL pour compacter
  2. pg_dump en format custom (-F c) avec compression niveau 9
  3. Copie du fichier depuis le conteneur vers l'hôte

Vider les données métier (garder la configuration)

Supprime toutes les données « métier » tout en conservant les tables de configuration (référentiels, paramètres, offres, catégories, etc.).

make db-truncate-data

Tables vidées :

  • Maintenance : request, request_offer, request_contract, request_equipment, request_refusal, request_refusal_reason, price
  • Dépannage : troubleshooting, troubleshooting_diagnosis
  • Adresses : address

Tables conservées (configuration) :

  • admin, civility, parameter, refusal_reason, diagnosis
  • equipment_category, equipment_type, equipment_brand, coefficient_rate
  • maintenance_offer, maintenance_offer_feature, feature
  • postal_code, discount, troubleshooting_recipient
  • Et tables techniques : refresh_tokens, reset_password_request, etc.

Le script SQL utilisé est scripts/truncate-data-tables.sql.


Exécuter les migrations Doctrine

Applique les migrations en attente (une seule transaction, rollback en cas d’erreur).

make db-migrate

Équivalent à :

docker compose exec api bin/console doctrine:migrations:migrate --no-interaction --all-or-nothing

Charger les fixtures

Charge les données de test définies dans api/sources/src/DataFixtures/.

make fixtures

Équivalent à :

docker compose exec api bin/console doctrine:fixtures:load --no-interaction

Accès direct au conteneur base de données

Se connecter à PostgreSQL en ligne de commande :

docker compose exec -u postgres db psql -d app -U app

Exécuter une requête unique :

docker compose exec -u postgres db psql -d app -U app -w -c "SELECT COUNT(*) FROM request;"

Exécuter un fichier SQL (depuis l’hôte) :

docker compose exec -T -u postgres db psql -d app -U app -w -f - < scripts/truncate-data-tables.sql

Récapitulatif

ActionCommande
Restaurer depuis un dumpmake db-restore
Créer un dumpmake db-dump
Vider les données métiermake db-truncate-data
Migrationsmake db-migrate
Fixturesmake fixtures
Shell PostgreSQLdocker compose exec -u postgres db psql -d app -U app

Variables d’environnement / Make

  • DUMP : chemin du fichier dump pour db-restore et db-dump (défaut : save-france.dump).