Inicio / Blog / Migraciones de esquema
Fiabilidad de datos e ingeniería de despliegue

Disciplina de migraciones de base de datos para proyectos ágiles

Un despliegue gradual no reemplaza todo el sistema al mismo tiempo. Código antiguo y nuevo pueden compartir base; los workers pueden actualizarse después; un rollback de aplicación no deshace transformaciones de datos. Trata los cambios de esquema como una transición compatible entre versiones, no como una sentencia DDL añadida al deploy.

Aplica expandir, migrar y contraer

Las versiones activas deben funcionar durante cada fase intermedia
1 / ExpandirAñade una estructura compatible y nullable.
2 / CompatibilizarDespliega código que admite el formato viejo y el nuevo.
3 / RellenarTransforma en lotes limitados y reanudables.
4 / CambiarVerifica paridad y adopta el formato nuevo.
5 / ContraerRetira lo anterior cuando migren los consumidores.
CambioSecuencia más seguraRiesgo que revisar
Renombrar columnaAñadir, soportar ambos, rellenar, cambiar y retirar despuésJobs o informes antiguos siguen consultando el nombre original
Cambiar significadoAñadir campo versionado y transformar con validaciónUnidades, nulos o redondeo distintos
Exigir un nuevo valorNullable, rellenar, validar y luego restringirEscaneo grande o lock al añadir constraint
Eliminar tablaParar escrituras, observar lecturas, archivar y borrar al finalProcesos no documentados aún la usan

Documenta qué versiones admiten cada fase, incluyendo jobs agendados, herramientas de informes y scripts administrativos. Revertir código solo es seguro si el esquema expandido sigue siendo compatible y los datos no cruzaron un límite irreversible.

Diseña backfills para el tráfico real

Los backfills deben ser idempotentes, reanudables y limitados por filas o duración. Usa un cursor estable, checkpoints e indicadores de progreso, errores y pendientes. Reduce el ritmo si la latencia o el retraso de réplicas excede el umbral. Compara recuentos y muestras transformadas antes de cambiar las lecturas.

En tablas grandes, evita una transacción gigante que retenga locks y genere WAL excesivo. Mide lotes con volúmenes parecidos a producción. Mantén coherentes las escrituras viejas y nuevas durante el solapamiento y usa consultas de conciliación para detectar diferencias.

Entiende los locks y fallos de DDL

“Online” no significa sin locks. El nivel depende del motor y del subcomando; incluso un cambio de metadatos puede esperar transacciones largas o bloquear brevemente. Consulta la documentación de la versión, configura timeouts, observa las colas de locks y separa cambios arriesgados.

Separa el cambio de esquema del backfill si tienen duraciones y fallos diferentes. Define si la recuperación es reintentar, avanzar con una corrección o restaurar. Las transformaciones de producción suelen ser más seguras con roll-forward. Un backup solo sirve si el tiempo y la pérdida de datos cumplen el objetivo; prueba la restauración.

Controla el orden del deploy

Ejecuta migraciones una sola vez en una etapa controlada, no desde cada réplica. Serializa la ejecución, registra versión y duración y alerta ante fallos. No edites migraciones ya aplicadas; añade otra correctiva. Revisa el SQL generado y prueba la actualización desde el esquema actual y desde una base vacía.

En resumen

Las migraciones seguras consideran versiones coexistentes, tráfico activo y cambios de datos potencialmente irreversibles. Expande con compatibilidad, rellena por lotes, verifica antes del cambio y contrae cuando ya no queden consumidores antiguos. Los pasos pequeños y predecibles superan un deploy que mezcla esquema, transformación y limpieza.

Referencias