Saltar al contenido

Lección 6 de 17 · Lectura y práctica

Revertir y Gestionar Historial de Migraciones

Concepto claveRevertir y gestionar el historial de migraciones en Prisma es como tener un sistema de control de versiones para tu base de datos. Imagina que estás construyendo una casa: cada migración es un cambio estructural.

Del concepto a la práctica

Taller de esta lección

Gestionar el historial significa comparar el estado registrado con el estado real y elegir una corrección que preserve datos. En producción, “deshacer” no debe interpretarse automáticamente como borrar la migración anterior: a menudo es más seguro crear una nueva migración compensatoria.

Ejemplo resuelto

Una migración añadió nickname nullable a User. Si el campo causa un problema, la corrección puede eliminarlo mediante una nueva migración después de confirmar que ninguna aplicación lo usa. El historial conserva ambos hechos.

Eliminar nickname es pérdida de datos: conserva/exporta valores autorizados y verifica que el requisito de retirada los contempla. Prisma Migrate no genera automáticamente una down migration para cualquier cambio; resolve marca estado del historial, sin deshacer SQL ya aplicado. En el fixture hay001 aplicada,002 fallida y003 pendiente: son tres archivos y una discrepancia/fallo, no tres migraciones exitosas. No marque003 aplicada antes de corregir el bloqueo002.

Pruébalo

  1. Lista las migraciones aplicadas y sus nombres.

  2. Identifica qué objetos creó cada una.

  3. Comprueba dependencias de la columna problemática.

  4. Diseña una migración nueva y revisa su pérdida potencial.

Comprueba tu resultado

La base termina sin nickname, pero el historial explica la adición y la retirada.

Error frecuente: editar o borrar manualmente una migración ya aplicada. Corrígelo con una migración posterior o una resolución documentada solo cuando el estado real lo justifique.

Ejercicio: registra tres migraciones en orden y marca la segunda como fallida; el resultado esperado es detectar exactamente una discrepancia, no inventar una cuarta aplicada.

Tablas de clientes y pedidos: INNER JOIN conserva coincidencias y LEFT JOIN conserva también a Luis sin pedidos.
CursaloMapa de práctica
Relacionar tablas sin perder filas

Una clave conecta cada pedido con su cliente. INNER JOIN devuelve las coincidencias y puede producir varias filas por cliente. LEFT JOIN conserva también los clientes sin pedido y representa los campos ausentes con NULL.

Ver la infografía en tamaño completo ↗

Concepto clave

Revertir y gestionar el historial de migraciones en Prisma es como tener un sistema de control de versiones para tu base de datos. Imagina que estás construyendo una casa: cada migración es un cambio estructural (añadir una habitación, modificar una pared). Si descubres que el último cambio tiene problemas, necesitas poder deshacerlo de forma segura sin dañar lo que ya funciona.

En producción, esto es crítico porque los errores en migraciones pueden causar downtime o pérdida de datos. Prisma maneja esto a través de comandos específicos que interactúan con la tabla _prisma_migrations, que actúa como el libro de registro de todos los cambios aplicados. No es solo revertir, sino entender qué migraciones se han aplicado, cuándo y por qué.

Cómo funciona en la práctica

El flujo típico para revertir una migración implica estos pasos:

  1. Verificar el estado actual de migraciones con prisma migrate status.
  2. Identificar la migración problemática (generalmente la última aplicada).
  3. Usar prisma migrate resolve para marcar migraciones como revertidas o aplicadas manualmente.
  4. En casos simples, crear una nueva migración que deshaga los cambios.

Ejemplo: Si añadiste una columna emailVerified a la tabla User y causa errores en producción, necesitas revertir ese cambio. Primero revisas el historial, luego creas una migración que elimine esa columna, aplicándola de forma controlada.

Código en acción

Antes: Schema con columna problemática

model User {
  id        Int     @id @default(autoincrement())
  email     String  @unique
  name      String?
  // Columna añadida en migración reciente
  emailVerified Boolean @default(false)
}

Después: Revertir creando nueva migración

# 1. Ver estado actual
npx prisma migrate status

# 2. Crear migración para revertir el cambio
npx prisma migrate dev --name remove_email_verified

# 3. En el archivo de migración generado, escribir SQL para revertir
-- En el archivo SQL de la migración
ALTER TABLE "User" DROP COLUMN "emailVerified";

Errores comunes

  • Revertir migraciones ya aplicadas en producción sin backup: Siempre haz backup de la base de datos antes de revertir en producción.
  • Confiar solo en prisma migrate reset: Este comando borra toda la base de datos, no es para producción. Usa prisma migrate resolve para gestionar migraciones específicas.
  • No probar reversiones en staging: Siempre prueba la reversión en un entorno idéntico a producción antes de aplicarla.
  • Olvidar dependencias de datos: Si eliminas una columna, asegúrate de que ningún código o query dependa de ella.
  • Ignorar el historial: Revisa _prisma_migrations regularmente para entender el estado de la base de datos.

Checklist de dominio

  1. Sé ejecutar prisma migrate status e interpretar su salida correctamente.
  2. Puedo revertir una migración reciente creando una nueva migración con los cambios inversos.
  3. Entiendo cómo usar prisma migrate resolve para marcar migraciones como aplicadas o revertidas manualmente.
  4. Conozco la diferencia entre migrate reset (dev) y migrate resolve (producción).
  5. Antes de revertir en producción, siempre hago backup de la base de datos.
  6. Verifico que el código de la aplicación no dependa de los cambios que voy a revertir.
  7. Documento cada reversión en el historial de cambios del proyecto.

Revertir una migración problemática en un proyecto existente

En este ejercicio, trabajarás con un proyecto Prisma que tiene una migración reciente que causó problemas. Tu tarea es revertirla de forma segura.

  1. Clona el repositorio de ejemplo: git clone https://github.com/example/prisma-migration-revert-exercise
  2. Instala dependencias: npm install
  3. Examina el schema actual en prisma/schema.prisma. Notarás que hay un modelo Product con una columna price de tipo Float.
  4. Ejecuta npx prisma migrate status para ver las migraciones aplicadas.
  5. La última migración (llamada "add_product_price") cambió price de Int a Float, pero esto rompió una API existente.
  6. Crea una nueva migración para revertir este cambio, volviendo price a tipo Int.
  7. Aplica la migración y verifica que la base de datos refleje el cambio.
  8. Ejecuta npx prisma studio para confirmar que la tabla Product tiene price como entero.
Pistas
  • Usa npx prisma migrate dev --name revert_price_change para crear la migración.
  • En el archivo SQL generado, escribe ALTER TABLE \"Product\" ALTER COLUMN \"price\" TYPE INTEGER USING \"price\"::integer; para cambiar el tipo.
  • Recuerda que USING es necesario en PostgreSQL para conversiones de tipo.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Prisma ORM Profesional: Schemas, Migraciones y Queries Optimizadas para Producción

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.