maven - migrations - mvn flyway migrate
El desajuste de Checksum de migraciones de Flyway 3.0 (7)
El problema ocurre justo después de que cambie el archivo ddl V1_2__books.sql. ¡Debería haber una forma mejor de forzar la ruta migratoria para reconocer los nuevos cambios!
Intenté ejecutar mvn flyway: reparar pero no funcionó, terminé cambiando la url del esquema en el archivo application.properties [datasource.flyway.url] en books2
También eliminé los siguientes archivos (libros es mi antiguo nombre de esquema)
~ @~:rm books.mv.db
~ @~:rm -r books.trace.db
datasource.flyway.url=jdbc:h2:file:~/books2
datasource.flyway.username=sa
datasource.flyway.password=
datasource.flyway.driver-class-name=org.h2.Driver
Ejecuté la aplicación y BINGO :)
después de actualizar el plugin de Flyway Maven de 2.3 a 3.0 obtengo:
[ERROR] Error al ejecutar el objetivo org.flywaydb: flyway-maven-plugin: 3.0: migrate (default-cli) en el proyecto xxx: org.flywaydb.core.api.FlywayException: Validate failed. Se encontraron diferencias entre las migraciones aplicadas y las migraciones disponibles: la suma de comprobación de migración no coincide con la migración V003__data_feed_sources_locations.sql: DB = 942424992, Classpath = 1117634405 -> [Ayuda 1]
Obtuve un error similar en algún otro proyecto.
Si vuelvo a degradar a 2.3, la migración se ejecuta correctamente. ¿Tiene esto algo que ver con la codificación de diferentes plataformas para calcular las sumas de comprobación?
¿Alguna solución alternativa, o mejor aún, adecuada?
Encontré que la manera más fácil de resolver este problema era actualizar literalmente la suma de comprobación en la tabla de esquema al valor esperado. Sabía a ciencia cierta que mis archivos de migración no habían cambiado y que el estado actual de la base de datos era lo que tenía que ser. Tampoco quería Flyway.repair()
tiempo leyendo la documentación y jugando con Flyway.repair()
u otros métodos que podrían Flyway.repair()
aún más las cosas. Una simple actualización SQL lo resolvió de inmediato
Flyway 3.0 cambió el valor predeterminado de validateOnMigrate a verdadero.
Sin embargo, esto es algo bueno, ya que en el espíritu de la falla rápida, los errores se descubren antes.
En su caso, algunos scripts cambiaron desde que se aplicaron, que es lo que informa Flyway.
Tienes dos opciones:
- suprime el error al establecer validateOnMigrate en falso (comportamiento predeterminado 2.3)
- invocar Flyway.repair () para reallignar las sumas de comprobación
Hay otra solución. Puede soltar su migración de la tabla schema_version .
Para agregar a la respuesta de Axel Fontaine:
Pude usar mvn flyway: reparar, pero tuve que señalar la propiedad de configuración flyway.locations
en la carpeta que contiene mis scripts de migración db. De lo contrario, recibiría el mensaje "No es necesaria la reparación de la tabla de metadatos xyz.schema_version. No se detectó ninguna migración fallida". como otras personas mencionadas.
Utilicé mvn -Dflyway.locations=filesystem:<project dir>/src/main/resources/db/migrations flyway:repair
y vi la suma de comprobación actualizada en la tabla de metadatos, solucionando mi problema.
Primero, busca cambios en la suma de comprobación. Estos cambios se producen si actualizamos los archivos de migración que ya están aplicados a una instancia de db.
FlywayException : Validate failed: la suma de comprobación de la migración no coincide con la versión de migración 18.2.6
-> Aplicado a la base de datos: 90181454
-> Se resolvió localmente: 717386176
El método repair () solucionaría el problema de la suma de comprobación actualizando la tabla flyway_schema_history con el valor de suma de comprobación local.
Sin embargo, descuidaría las declaraciones actualizadas en el mismo archivo de migración. Por lo tanto, los cambios nuevos en el mismo archivo se omitirán ya que ya hay una entrada para la versión en la tabla flyway_schema_history . El método setValidateOnMigrate () no tiene ningún efecto en este escenario. Deberíamos seguir el enfoque incremental, los cambios de esquema deberían suministrarse a través de nuevos archivos.
Solo quería agregar eso para que la suma de comprobación se actualice por reparación. Flyway debe tener acceso al directorio donde están todas las migraciones. De lo contrario, Flyway solo trata de negocios y resultados
"La reparación de la migración fallida en la tabla de metadatos
xyz
.schema_version
no es necesaria. No se detectó migración fallida".