Vérification des migrations Doctrine
Processus
- Trouver la ou les migrations récentes dans
migrations/ - Analyser chaque opération SQL
- Vérifier les critères ci-dessous
- Proposer les corrections
Critères d'analyse
Perte de données (bloquant)
DROP TABLEsans vérification que la table est vide ou que les données ont été migréesDROP COLUMNsans migration de données préalableTRUNCATEdans une migration- Modification de type de colonne qui tronque des données (VARCHAR(255) vers VARCHAR(50))
- Suppression d'une contrainte UNIQUE qui pourrait créer des doublons
Cohérence up/down (bloquant)
- Méthode
down()absente down()qui ne fait pas l'inverse exact deup()down()qui tente de recréer une colonne supprimée sans restaurer les données
Performance (important)
ALTER TABLEsur une table volumineuse (> 1M lignes) sans estimation de temps- Ajout d'index sur une grosse table sans
CONCURRENTLY(PostgreSQL) ou équivalent - Plusieurs
ALTER TABLEsur la même table au lieu d'un seul UPDATEmassif sans clauseWHERElimitante
Zero-downtime (important)
- Renommage de colonne (casse l'ancien code encore en prod)
- Suppression de colonne encore référencée dans le code
- Ajout de colonne NOT NULL sans valeur par défaut
- Modification de type de colonne
Recommandation zero-downtime
Pour les opérations destructives, recommander le pattern en 3 étapes :
- Migration 1 : ajouter la nouvelle colonne/table
- Déploiement du code qui écrit dans les deux
- Migration 2 : migrer les données, supprimer l'ancien