Patrones de Migración de Base de Datos
Cambios de esquema de base de datos seguros y reversibles para sistemas de producción.
Cuándo Activar
- Crear o alterar tablas de base de datos
- Agregar/eliminar columnas o índices
- Ejecutar migraciones de datos (backfill, transformación)
- Planificar cambios de esquema de tiempo cero (zero-downtime)
- Configurar herramientas de migración para un nuevo proyecto
Principios Fundamentales
- Cada cambio es una migración — nunca alterar bases de datos de producción manualmente
- Las migraciones son solo hacia adelante en producción — los rollbacks usan nuevas migraciones hacia adelante
- Las migraciones de esquema y de datos son separadas — nunca mezclar DDL y DML en una migración
- Probar migraciones contra datos de tamaño de producción — una migración que funciona en 100 filas puede bloquear en 10M
- Las migraciones son inmutables una vez desplegadas — nunca editar una migración que ya se ejecutó en producción
Lista de Verificación de Seguridad de Migración
Antes de aplicar cualquier migración:
- La migración tiene tanto UP como DOWN (o está marcada explícitamente como irreversible)
- Sin bloqueos de tabla completa en tablas grandes (usar operaciones concurrentes)
- Las nuevas columnas tienen valores predeterminados o son nullable (nunca agregar NOT NULL sin valor predeterminado)
- Índices creados de forma concurrente (no en línea con CREATE TABLE para tablas existentes)
- El backfill de datos es una migración separada del cambio de esquema
- Probado contra una copia de datos de producción
- Plan de rollback documentado
Patrones PostgreSQL
Agregar una Columna de Forma Segura
Agregar un Índice Sin Tiempo de Inactividad
Renombrar una Columna (Zero-Downtime)
Nunca renombrar directamente en producción. Usar el patrón expand-contract:
Eliminar una Columna de Forma Segura
Migraciones de Datos Grandes
Prisma (TypeScript/Node.js)
Flujo de Trabajo
Ejemplo de Esquema
Migración SQL Personalizada
Para operaciones que Prisma no puede expresar (índices concurrentes, backfills de datos):
Drizzle (TypeScript/Node.js)
Flujo de Trabajo
Ejemplo de Esquema
Kysely (TypeScript/Node.js)
Flujo de Trabajo (kysely-ctl)
Archivo de Migración
Migrador Programático
Django (Python)
Flujo de Trabajo
Migración de Datos
SeparateDatabaseAndState
Eliminar una columna del modelo Django sin eliminarla de la base de datos inmediatamente:
golang-migrate (Go)
Flujo de Trabajo
Archivos de Migración
Estrategia de Migración de Zero-Downtime
Para cambios críticos de producción, seguir el patrón expand-contract:


