2015-11-03 3 views
10

Stiamo utilizzando Flyway per migrare lo schema del database e abbiamo già più di 100 script di migrazione.Un modo per "comprimere" le migrazioni Flyway?

Dopo aver "eseguito lo schiacciamento" di più migrazioni in una singola migrazione di prima versione, ciò è corretto durante lo sviluppo, in quanto eliminiamo e ricreamo lo schema. Ma nella produzione ciò non funzionerebbe, in quanto Flyway non sarà in grado di convalidare le migrazioni.

Non sono riuscito a trovare alcuna documentazione o best practice su cosa fare in questo caso. Il problema è che la quantità dei file aumenta costantemente, non voglio vedere migliaia di file di migrazione ogni volta, essenzialmente se la produzione è già nell'ultima versione. Voglio dire, gli script di migrazione che hanno un numero di versione inferiore alla versione in produzione sono per noi irrilevanti, sarebbe fantastico se potessimo schiacciare quei file in una singola migrazione.

Utilizziamo MySQL.

Come dovremmo gestirlo?

risposta

10

Non è questo che farebbe la rilocalizzazione?

Sono ancora nuovo al flyway, ma è così che penso che funzionerebbe. Si prega di verificare quanto segue prima di prendere la parola per questo.

Elimina la tabella schema_version. Elimina gli script di migrazione.

Run Flyway basale (questo ricrea la tabella SCHEMA_VERSION e aggiunge un record di base come la versione 1)

Ora siete pronti per partire. Ricorda che non sarai in grado di "migrare" a nessuna versione precedente poiché hai rimosso tutti gli script di migrazione, ma questo potrebbe non essere un problema per te.

Passo dopo passo soluzione:

  1. drop table schema_version;
  2. Esportare la struttura del database come uno script tramite MySQL Workbench, per esempio. Nome questo script V1__Baseline.sql
  3. Cancella tutti gli script di migrazione e aggiungere V1__Baseline.sql nella cartella degli script, quindi è l'unica sceneggiatura disponibile per Flyway
  4. comando di
  5. Run Flyway "baseline"
  6. Fatto
+0

Questo non significa che se sei un team di sviluppatori, allora tutti gli altri sviluppatori devono anche abbandonare la tabella schema_version? –

+0

Sì. Ogni database che è "gestito" da quel set di script di migrazione Flyway avrà bisogno dello stesso trattamento. –

+0

Quando si esegue la baseline, verrà verificato che lo schema esistente corrisponda al nuovo schema V1__Baseline.sql? Cosa succede se non desidero che flyway convalidi lo schema esistente con V1__Baseline.sql, potrei creare una riga con il risultato risultante nella tabella schema_version? – lloiacono