Nous utilisons flyway pour gérer la version du schéma de base de données et nous sommes confrontés à un problème. Puisque nous travaillons en équipe et utilisons git comme gestion de code source, il pourrait arriver que différentes personnes mettent à jour le schéma de base de données sur leur propre référentiel local. Si cela se produit, nous aurons
Migration résolue détectée non appliquée à la base de données: 2016.03.17.16.46 "
L'heure "2016.03.17.16.46" a été ajoutée par une autre personne et j'ai déjà appliqué un horodatage au-delà de cette heure. Si cela se produit, nous devons nettoyer toutes les tables de la base de données et les recréer. Nous avons essayé de définir false sur validateOnMigrate
et avons flywayClean
, mais rien n’a aidé. Y a-t-il un autre moyen de changer cela?
outOfOrder
est votre ami ici. Définissez-la sur true pour permettre l'insertion postérieure de ces migrations.
J'ai rencontré un problème similaire lors du passage d'une branche à une autre et j'ai essayé de lancer flyway:migrate
. Par exemple, lorsque je suis sur la branche 'release_4.6.0', je n'ai pas de migration sur ma machine locale depuis la branche 'release_4.7.0'. J'ai donc reçu l'erreur suivante FlywayException: Validate failed: Detected applied migration not resolved locally
. La solution qui a fonctionné pour moi consiste à définir l'option ignoreMissingMigrations
flyway sur true. En maven on dirait
flyway:migrate -Dflyway.ignoreMissingMigrations=true
Ce n'est peut-être pas une réponse à cette question, mais cela peut être utile pour ceux qui ont le même problème que moi.
Ici vous pouvez trouver plus de détails: https://flywaydb.org/documentation/commandline/migrate#ignoreMissingMigrations
..Ou vous venez de nettoyer la table flyway_schema_history
et bootrun
encore.
Assurez-vous que vos séquences SQL sont toutes idempotentes.
Ensuite, lors du prochain lancement, vous verrez des lignes de journaux telles que:
o.f.c.i.s.DefaultSqlScriptExecutor : DB: relation "transaction_attempt" already exists, skipping (SQL State: 42P07 - Error Code: 0)
o.f.c.i.s.DefaultSqlScriptExecutor : DB: relation "provider" already exists, skipping (SQL State: 42P07 - Error Code: 0)
N'oubliez pas de vider les données dans l'environnement de production.
peut être à cause de la commande
ajouter sur application.properties
flyway.out-of-order = true
ou application.yml sur le printemps
flyway:
out-of-order: true