🗄️ Database · Safety

@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.

Télécharger MaifadyVoir les 30 agents

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

  1. Tu lui décris le changement souhaité (ADD COLUMN, RENAME, DROP, etc.).
  2. Il détecte le SGBD et la version pour adapter la syntaxe.
  3. Pour chaque opération risquée, il décompose en plusieurs étapes safe.
  4. Idempotent quand ça coûte rien (IF NOT EXISTS / IF EXISTS).
  5. Documente la durée attendue et l'impact de lock.
  6. 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.

Prêt à migrer sans peur ?

Télécharger Maifady