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
Lista las migraciones aplicadas y sus nombres.
Identifica qué objetos creó cada una.
Comprueba dependencias de la columna problemática.
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.

Mapa de prácticaUna 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:
- Verificar el estado actual de migraciones con
prisma migrate status. - Identificar la migración problemática (generalmente la última aplicada).
- Usar
prisma migrate resolvepara marcar migraciones como revertidas o aplicadas manualmente. - 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. Usaprisma migrate resolvepara 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_migrationsregularmente para entender el estado de la base de datos.
Checklist de dominio
- Sé ejecutar
prisma migrate statuse interpretar su salida correctamente. - Puedo revertir una migración reciente creando una nueva migración con los cambios inversos.
- Entiendo cómo usar
prisma migrate resolvepara marcar migraciones como aplicadas o revertidas manualmente. - Conozco la diferencia entre
migrate reset(dev) ymigrate resolve(producción). - Antes de revertir en producción, siempre hago backup de la base de datos.
- Verifico que el código de la aplicación no dependa de los cambios que voy a revertir.
- 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.
- Clona el repositorio de ejemplo:
git clone https://github.com/example/prisma-migration-revert-exercise - Instala dependencias:
npm install - Examina el schema actual en
prisma/schema.prisma. Notarás que hay un modeloProductcon una columnapricede tipoFloat. - Ejecuta
npx prisma migrate statuspara ver las migraciones aplicadas. - La última migración (llamada "add_product_price") cambió
pricedeIntaFloat, pero esto rompió una API existente. - Crea una nueva migración para revertir este cambio, volviendo
pricea tipoInt. - Aplica la migración y verifica que la base de datos refleje el cambio.
- Ejecuta
npx prisma studiopara confirmar que la tablaProducttienepricecomo entero.
Pistas
- Usa
npx prisma migrate dev --name revert_price_changepara 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
USINGes 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.