Arostik Logo
ArostikVLARCK

Micro-Technology Solutions

Bases de DatosNivel: Intermedio14 min de lección

Migraciones de Bases de Datos: Evolución de Esquemas sin Caídas

Cómo versionar tablas, columnas e índices con herramientas como Flyway, Liquibase y Prisma Migrate en equipos profesionales.

Migraciones de Bases de Datos: Evolución de Esquemas sin Caídas
AROS STUDENT
E
Equipo de Arquitectura de Datos ArostikEspecialistas en DevOps y Bases de Datos · Actualizado el 25 sep 2026
¿Qué es una Migración de Base de Datos?

En el código de tu aplicación utilizas Git para rastrear cada cambio, commit por commit, con la posibilidad de viajar en el tiempo y colaborar en equipo. Pero, ¿cómo rastreas la evolución de la estructura de la base de datos (nuevas tablas, columnas agregadas, índices creados o restricciones de clave foránea)? Si los programadores ejecutan comandos manuales como `ALTER TABLE` entrando directamente por consola a la base de datos de producción, el caos es inminente: nadie sabe qué versión de la base de datos tiene cada servidor, el entorno de pruebas local deja de coincidir con el servidor de producción y los despliegues explotan en pedazos. Una **Migración de Base de Datos** es como un sistema de control de versiones de Git pero para el esquema de tu base de datos: consiste en una serie ordenada y cronológica de archivos de código (scripts SQL o definiciones tipadas) que describen exactamente cómo transformar la base de datos de un estado anterior a uno nuevo (**Up Migration**) y cómo revertir el cambio ante una emergencia (**Down Migration**).

¿Por Qué Ningún Proyecto Profesional Puede Prescindir de Migraciones?
Ventajas y Beneficios:
  • ✓Automatización en CI/CD: Tu pipeline de despliegue puede aplicar las migraciones automáticamente en producción al aprobarse un Pull Request.
  • ✓Reproducibilidad Total: Un nuevo desarrollador que entra al equipo puede levantar la base de datos completa de la empresa desde cero en 2 minutos corriendo un solo comando.
  • ✓Auditoría y Trazabilidad: Sabes con precisión quirúrgica qué día, qué hora y qué programador agregó cada columna o modificó un tipo de dato.
Problemas que resuelve:
  • •Elimina para siempre los errores del tipo: 'En mi máquina local funciona, pero en producción dice que la columna no existe'.
  • •Evita bloqueos de tablas gigantes durante despliegues diurnos aplicando técnicas de migraciones seguras (Expand and Contract).
  • •Garantiza que todos los entornos (Desarrollo, Staging y Producción) estén siempre 100% sincronizados.
El Libro de Planos de una Mansión en Construcción

Imagina que estás construyendo una casa de tres pisos con un equipo de 10 albañiles y arquitectos: - Si cada albañil decide derribar una pared o mover una tubería de agua por su cuenta sin registrarlo en ningún plano, los electricistas pondrán cables donde hay agua y la casa sufrirá un cortocircuito catastrófico. - En un proyecto profesional existe un **Libro de Planos Oficial Foliado**: el Plano 1 describe los cimientos de concreto, el Plano 2 agrega las paredes del primer piso, el Plano 3 añade el cableado eléctrico y el Plano 4 construye el techo. Cada plano tiene un número de versión secuencial. Si contratas a un electricista nuevo, lee los planos del 1 al 4 y sabe exactamente qué hay detrás de cada pared.

Conexión con la Tecnología:La base de datos guarda una tabla oculta llamada `schema_migrations` o `_prisma_migrations`. Cada vez que se corre el comando de migración, la herramienta lee esa tabla, ve qué archivos ya se aplicaron y ejecuta únicamente los scripts nuevos pendientes en orden estricto.

Explicación Paso a Paso del Tema

1

Estructura de un Archivo de Migración Estándar

Las herramientas como Flyway o Knex organizan las migraciones con una marca de tiempo secuencial y dos funciones: - **UP**: Aplica el nuevo cambio estructural. - **DOWN (Rollback)**: Deshace el cambio si algo sale mal.

Observa un ejemplo clásico en SQL puro.

Comando de Terminal / Código
-- ARCHIVO: V2026_09_25_120000__agregar_telefono_a_usuarios.sql

-- UP (Aplicar el cambio):
ALTER TABLE usuarios ADD COLUMN telefono VARCHAR(20);
CREATE INDEX idx_usuarios_telefono ON usuarios(telefono);

-- DOWN (Revertir el cambio si falla el despliegue):
-- DROP INDEX idx_usuarios_telefono;
-- ALTER TABLE usuarios DROP COLUMN telefono;
Desglose de Parámetros:
Parámetro / FlagTipo / RolSignificado y Uso
V2026_09_25...Prefijo de VersiónMarca temporal única que asegura que las migraciones se ejecuten en el orden cronológico exacto.
ALTER TABLEComando DDLInstrucción de definición de datos que modifica la estructura de la tabla existente sin borrar los datos previos.
Consejo Profesional:

Nunca modifiques un archivo de migración que ya fue ejecutado y mergeado en la rama principal. Si cometiste un error, crea una nueva migración que corrija el defecto.

2

Migraciones Automatizadas con Prisma Migrate

Si utilizas un ORM moderno como Prisma, no necesitas escribir SQL manual. Modificas tu archivo `schema.prisma` y ejecutas el CLI.

Prisma compara tu esquema con la base de datos real, genera el script SQL de migración y lo aplica automáticamente.

Comando de Terminal / Código
# En entorno de desarrollo (crea y aplica la migración):
npx prisma migrate dev --name agregar_avatar_usuario

# En entorno de producción CI/CD (solo aplica migraciones pendientes):
npx prisma migrate deploy
Desglose de Parámetros:
Parámetro / FlagTipo / RolSignificado y Uso
migrate devComandoDetecta cambios en el modelo, genera el archivo SQL versionado y actualiza los tipos de TypeScript.
migrate deployComando de ProducciónAplica de forma estricta y segura las migraciones pendientes sin modificar archivos locales.
Error Común a Evitar:

Ejecutar `prisma migrate dev` en producción: este comando puede solicitar resetear la base de datos completa. En servidores de producción se debe ejecutar exclusivamente `prisma migrate deploy`.

3

El Patrón Expand and Contract para Cero Tiempo de Inactividad

Si renombras una columna en producción de golpe (`ALTER TABLE users RENAME COLUMN nom TO nombre`), la aplicación se caerá durante el deploy porque el código viejo aún buscará `nom` mientras el código nuevo busca `nombre`.

Aplica la regla de tres pasos (Expand and Contract): 1. **Expandir**: Agrega la nueva columna `nombre` dejando la vieja intacta y haz que el backend escriba en ambas. 2. **Migrar**: Copia los datos viejos a la nueva columna en segundo plano. 3. **Contraer**: Despliega el código que lee solo de `nombre` y, semanas después, borra la columna vieja `nom`.

Consejo Profesional:

En PostgreSQL, al crear índices en tablas masivas en producción, usa siempre `CREATE INDEX CONCURRENTLY` para evitar bloquear las lecturas y escrituras de los usuarios.

Casos Prácticos Reales en Producción

Situaciones de ingeniería reales sin mención de presupuestos ficticios.

1El Despliegue de un Campo Obligatorio en una Tabla de 20 Millones de Filas

Escenario Real:

Un equipo intentó ejecutar `ALTER TABLE clientes ADD COLUMN pais VARCHAR(50) NOT NULL DEFAULT 'México'` en horario pico sobre una tabla de 20 millones de filas. La consulta bloqueó la tabla completa con un candado exclusivo durante 45 minutos, congelando todo el sistema.

Solución de Ingeniería Aplicada:

Adoptaron buenas prácticas de migración: en PostgreSQL moderno se agrega primero la columna como nullable con valor default (operación que es instantánea O(1)), se rellenan los datos en lotes pequeños y finalmente se añade la restricción `NOT NULL` con validación diferida.

Fichas Nemotécnicas de Conceptos Clave

Glosario rápido para recordar los términos fundamentales de la lección.

Migración de Base de Datos

Conjunto de instrucciones estructuradas y versionadas que transforman incrementalmente el esquema de una base de datos.

schema_migrations

Tabla interna utilizada por los frameworks de migración para registrar el historial de versiones ya ejecutadas en la base de datos.

CREATE INDEX CONCURRENTLY

Comando de PostgreSQL que construye un índice en segundo plano sin adquirir un candado de bloqueo exclusivo sobre la tabla.

Autoevaluación Rápida3 preguntas

Migraciones de Bases de Datos: Evolución de Esquemas sin Caídas

Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.

Aciertos: 0 / 3
1

¿Cuál es el propósito fundamental de utilizar un sistema de migraciones de bases de datos?

2

¿Cómo sabe una herramienta de migración (como Flyway o Prisma) qué archivos ya fueron aplicados y cuáles faltan por ejecutar?

3

¿Por qué en PostgreSQL se recomienda usar 'CREATE INDEX CONCURRENTLY' en bases de datos con mucho tráfico en producción?

Preguntas Frecuentes (FAQ)

¿Se debe incluir la migración de datos dentro de la misma migración de esquema?

Para cambios pequeños sí, pero si necesitas transformar o migrar 50 millones de filas, nunca lo hagas dentro de la misma transacción DDL porque mantendrás la tabla bloqueada. Separa el cambio estructural (DDL) en una migración, y corre la migración de datos pesada en segundo plano en lotes de 1,000 registros mediante scripts dedicados.

¿Qué pasa si una migración falla en medio de su ejecución en producción?

En motores transaccionales que soportan DDL transaccional (como PostgreSQL), todo el cambio se revierte automáticamente (ROLLBACK) y la base de datos queda intacta. En motores sin DDL transaccional completo (como versiones antiguas de MySQL), el esquema puede quedar a medio aplicar, requiriendo intervención manual cuidadosa para limpiar el estado.

Temas relacionados:#Bases de Datos#SQL#Migraciones#DevOps#Prisma#Flyway