FlywayPostgreSQLSpring BootDatabase

Flyway en equipos: migraciones reproducibles sin romper producción

Versionar el esquema es solo el inicio. Explico inmutabilidad, compatibilidad entre versiones, datos de referencia y despliegues seguros con Spring Boot.

Edgar Camberos
Edgar Camberos
25 jul 20269 min de lectura

Código y evidencia relacionada

Enlaces directos a implementaciones, repositorios o recursos desplegados.

El objetivo no es solo crear tablas

Flyway convierte el esquema en parte del entregable: cada entorno puede reconstruir la misma secuencia de cambios. En un equipo, esto elimina instrucciones manuales y reduce diferencias invisibles entre bases locales, staging y producción.

Migraciones inmutables

Una migración aplicada no se edita. Si aparece un error, creo una nueva versión que lo corrige:

textedgar.dev
V1__create_users.sql
V2__add_email_verification.sql
V3__fix_verification_index.sql

Modificar V1 después de ejecutarla rompe el historial y hace que dos entornos puedan representar versiones distintas con el mismo nombre.

Cambios compatibles en despliegues

Cuando la aplicación anterior y la nueva pueden convivir durante un despliegue, uso una secuencia expandir-migrar-contraer:

  • Agregar la nueva columna o tabla sin eliminar la anterior.
  • Desplegar código capaz de trabajar con ambas estructuras.
  • Migrar o completar datos.
  • Cambiar lecturas y escrituras al nuevo modelo.
  • Eliminar la estructura anterior en una versión posterior.
  • Esto evita que una migración destructiva deje fuera de servicio instancias todavía activas.

    Datos de referencia

    Roles, catálogos y estados iniciales pueden vivir en migraciones versionadas cuando son parte del modelo. No mezclo esos datos con usuarios de prueba o contenido temporal.

    Para datos que deben actualizarse repetidamente, evalúo migraciones repetibles o procesos idempotentes con responsabilidad clara.

    Schemas compartidos

    En ECOS utilicé un schema dedicado dentro de una instancia compartida. Esto reduce colisiones, pero no reemplaza permisos, naming consistente y ownership explícito.

    La aplicación debe declarar cuál schema administra y Flyway debe apuntar al mismo historial en todos los entornos.

    Qué pruebo

    Una migración no está terminada solo porque funciona sobre una base vacía. Verifico:

  • Arranque desde cero.
  • Upgrade desde una versión representativa.
  • Constraints e índices esperados.
  • Compatibilidad del código con datos existentes.
  • Comportamiento ante una migración fallida.
  • Conclusión

    Flyway aporta valor cuando el equipo trata las migraciones como código de producción: revisión por PR, inmutabilidad, compatibilidad y pruebas. Versionar SQL sin una estrategia de despliegue solo automatiza el riesgo.

    Edgar Camberos

    Java Backend Developer · Spring Boot