web-dev-qa-db-fra.com

La migration résolue détectée n'est pas appliquée à la base de données sur la voie de migration

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?

22
Zhao Yi

outOfOrder est votre ami ici. Définissez-la sur true pour permettre l'insertion postérieure de ces migrations.

23
Axel Fontaine

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

2
Alex

..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.

0
WesternGun

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