@migration-writerLe démineur — migrations forward-only sans downtime
Maifady est un plugin Claude Code 100% gratuit avec 30 agents IA — @migration-writer écrit les migrations SQL que tu n'oses pas écrire toi-même : ADD COLUMN NOT NULL sur table de 5M lignes, rename sans downtime, drop column en 3 étapes safe. Forward-only, prêt à exécuter dans phpMyAdmin.
Le problème qu'il résout
Tu dois ajouter une colonne phone (NOT NULL UNIQUE) à la table users en prod. 5 millions de lignes. Pas de downtime acceptable. Tu écris ALTER TABLE users ADD COLUMN phone VARCHAR(20) NOT NULL UNIQUE et tu te retrouves avec une migration qui lock la table pendant 20 minutes. Catastrophe.
@migration-writer connaît les patterns pour faire ça safely en plusieurs étapes — et te donne le SQL exact pour MariaDB / Postgres / SQLite.
Comment il bosse
- Tu lui décris le changement souhaité (ADD COLUMN, RENAME, DROP, etc.).
- Il détecte le SGBD et la version pour adapter la syntaxe.
- Pour chaque opération risquée, il décompose en plusieurs étapes safe.
- Idempotent quand ça coûte rien (
IF NOT EXISTS/IF EXISTS). - Documente la durée attendue et l'impact de lock.
- Forward-only : pour annuler, nouvelle migration DROP/ALTER.
Exemple concret
Tu tapes
›@migration-writer ajoute colonne phone VARCHAR(20) NOT NULL UNIQUE à users. 5M rows, MariaDB 11, prod live. Plan safe en plusieurs étapes.
Tu obtiens
## Plan en 4 migrations ### 023 — Add column (nullable, instant) ALTER TABLE users ADD COLUMN phone VARCHAR(20) NULL; -- Durée: instant (online sur MariaDB 10.5+) ### 024 — Backfill en chunks (script séparé) -- scripts/backfill_phone.php loops 10000 rows/batch -- avec SLEEP(0.1) entre batches. ### 025 — Add UNIQUE index (online) CREATE UNIQUE INDEX uk_users_phone ON users (phone) ALGORITHM=INPLACE LOCK=NONE; ### 026 — Add NOT NULL constraint (après backfill 100%) ALTER TABLE users MODIFY COLUMN phone VARCHAR(20) NOT NULL;
Pourquoi tu vas l'aimer
Forward-only
Pas de down() qui détruira des données en prod par erreur. Pour annuler, nouvelle migration inverse.
Durée annoncée
"Instant", "5-30 min", "à exécuter de nuit" — tu sais à quoi t'attendre.
Multi-étapes safe
Pour les opérations dangereuses, plan détaillé. Pas un seul ALTER qui lock 20 min.
Online quand possible
ALGORITHM=INPLACE LOCK=NONE (MariaDB), CONCURRENTLY (Postgres). Pas de downtime.
Quand l'utiliser
✅ Idéal pour
- Tout changement de schéma en prod live
- ADD / DROP / RENAME COLUMN sur grosse table
- Add unique constraint avec déduplication
- Backfill de données en arrière-plan
⚠️ Pas adapté quand
- Tu démarres avec un schéma vierge → @schema-designer
- Tu veux optimiser une requête → @sql-optimizer
- NoSQL / migrations de documents — pas son domaine
Combine avec ces agents
Questions fréquentes
Pourquoi forward-only ?
Un rollback automatisé en prod = perte de données silencieuse. Forward-only = pour annuler, on écrit une nouvelle migration qui DROP / ALTER. C'est la pratique pro des SaaS live.
Peut-il gérer ADD COLUMN NOT NULL sur 5M rows ?
Oui en 3-4 migrations : add nullable, backfill en chunks, add NOT NULL constraint. Online sur MariaDB 10.5+ et Postgres avec ALGORITHM=INPLACE / CONCURRENTLY.
Que faire pour DROP COLUMN en prod ?
Plan en 3 phases : (1) stop writes (remove ORM mapping), (2) stop reads (remove all SELECT references), (3) DROP COLUMN. Un seul DROP en prod = suicide si du code lit encore la colonne.