~/VibeHandbook
PDF gratis

Capítulo 14 · 04

Migraciones: cambiar el esquema con seguridad

Tu esquema cambiará: añadirás una columna, renombrarás una tabla, agregarás un índice. Piénsalo como los cambios rastreados de un documento compartido: cada cambio queda registrado en orden, de modo que la copia de todos pueda actualizarse de la misma manera. Una migración es un script versionado y repetible que describe uno de esos cambios. Las migraciones importan porque el esquema en tu laptop, en la laptop de tu compañero de equipo y en producción debe permanecer idéntico.

Las reglas que mantienen las migraciones seguras:

  • Nunca edites la a mano en producción. Escribe una migración.
  • Las migraciones avanzan hacia adelante. Cada una es un archivo nuevo; no reescribes las antiguas que ya se ejecutaron.
  • Haz los cambios destructivos con cuidado. Eliminar una columna o una tabla borra datos de forma permanente. Ten primero una copia de seguridad.
  • Los cambios aditivos son los más seguros. Añadir una columna que admite nulos rara vez rompe algo; renombrar o eliminar una puede romper código en ejecución.

Las migraciones forman una cadena ordenada: cada una es un paso numerado que mueve cada copia de la base de datos de un estado conocido al siguiente, de modo que tu laptop, la de un compañero y producción terminan siendo idénticas:

   empty DB
      │
      ▼
  ┌────────────┐   ┌────────────┐   ┌────────────┐   ┌────────────┐
  │ 001_init   │ ▶ │ 002_add    │ ▶ │ 003_index  │ ▶ │ 004_bio    │
  │ users      │   │ posts      │   │ on author  │   │ column     │
  └────────────┘   └────────────┘   └────────────┘   └────────────┘
   apply in order ─────────────────────────────────────────▶ current
   never edit a step that already ran — add a NEW one

Herramientas como Prisma, Drizzle o las migraciones de Rails generan y rastrean esto por ti. Déjalas hacerlo.

Una migración tiene dos mitades: el cambio a aplicar (up) y cómo deshacerlo (down). Una herramienta confiable genera ambas, de modo que un despliegue fallido pueda revertirse limpiamente:

-- up: add an optional bio, safe to apply live
ALTER TABLE users ADD COLUMN bio TEXT;

-- down: reverse it
ALTER TABLE users DROP COLUMN bio;

Las migraciones genuinamente peligrosas son los renombrados y los cambios de tipo, porque el código antiguo y el esquema nuevo discrepan brevemente. El patrón profesional es dividirlos en pasos aditivos: añade la columna nueva, rellénala con datos existentes (backfill), cambia el código para leerla y solo elimina la columna antigua en un despliegue posterior, una vez que nada la referencia. Se siente lento, pero es la diferencia entre un lanzamiento sin sobresaltos y un pico de errores de 500 páginas para cada usuario a mitad del despliegue.

¿Lo quieres sin conexión?

Descarga el libro entero en PDF o EPUB — gratis.