Rolling Back Migrations with Flyway

1. Introduksjon

I denne korte opplæringen vil vi utforske et par måter å tilbakestille en migrering med Flyway.

2. Simuler tilbakeføring med en migrasjon

I denne delen vil vi tilbakestille databasen vår ved hjelp av en standard migreringsfil.

I eksemplene våre bruker vi kommandolinjeversjonen av Flyway. Imidlertid er kjerneprinsippene like anvendelige for de andre formatene, for eksempel kjernen API, Maven plugin, etc.

2.1. Lag migrasjon

La oss først legge til en ny bok tabellen til databasen vår. For å gjøre dette oppretter vi en migreringsfil som heter V1_0__create_book_table.sql:

lage tabellbok (id numerisk, tittel varchar (128), forfatter varchar (256), begrensning pk_book primærnøkkel (id));

For det andre, la oss bruke migrasjonen:

./flyway migrere

2.2. Simuler tilbakeslag

Så, på et tidspunkt, si at vi må reversere den siste migreringen.

For å gjenopprette databasen til før bok tabellen ble opprettet, la oss lage migrasjon kalt V2_0__drop_table_book.sql:

drop bord bok;

La oss deretter bruke overføringen:

./flyway migrere

Til slutt kan vi sjekke historikken til alle migrasjonene ved hjelp av:

./flyway info

som gir oss følgende utgang:

+ ----------- + --------- + ------------------- + ------ + --------------------- + --------- + | Kategori | Versjon | Beskrivelse | Type | Installert på | Stat | + ----------- + --------- + ------------------- + ------ + --------------------- + --------- + | Versjonert | 1.0 | lage bokbord | SQL | 2020-08-29 16:07:43 | Suksess | | Versjonert | 2.0 | drop table book | SQL | 2020-08-29 16:08:15 | Suksess | + ----------- + --------- + ------------------- + ------ + --------------------- + --------- +

Legg merke til at den andre migreringen vår gikk vellykket.

Når det gjelder Flyway, er den andre migreringsfilen bare nok en standard migrering. Den faktiske gjenopprettingen av databasen til forrige versjon gjøres helt gjennom SQL. For eksempel, i vårt tilfelle, er SQL for å droppe tabellen det motsatte av den første migreringen, som oppretter tabellen.

Ved hjelp av denne metoden, revisjonssporet viser oss ikke at den andre migreringen er relatert til den første, siden de har forskjellige versjonsnumre. For å få en slik revisjonsspor, må vi bruke Flyway Angre.

3. Bruke Flyway Angre

For det første er det viktig å merke seg det Flyway Undo er en kommersiell funksjon i Flyway og er ikke tilgjengelig i Community Edition. Derfor trenger vi enten Pro Edition eller Enterprise Edition for å kunne bruke denne funksjonen.

3.1. Lag migrasjonsfiler

La oss først lage en migreringsfil som heter V1_0__create_book_table.sql:

lage tabellbok (id numerisk, tittel varchar (128), forfatter varchar (256), begrensning pk_book primærnøkkel (id));

For det andre, la oss lage den tilsvarende angre migreringsfilen U1_0__create_book_table.sql:

drop bord bok;

Legg merke til hvordan filnavn-prefikset er 'U' sammenlignet med det normale migreringsprefikset til 'V' i vår angre overføring. I våre angre overføringsfiler, vi skriver SQL som reverserer endringene i den tilsvarende migreringsfilen. I vårt tilfelle slipper vi tabellen som er opprettet av normal migrasjon.

3.2. Bruk migrasjoner

Deretter, la oss sjekke den nåværende tilstanden til migrasjonene:

./flyway -pro info

Dette gir oss følgende utgang:

+ ----------- + --------- + ------------------- + ------ + -------------- + --------- + ---------- + | Kategori | Versjon | Beskrivelse | Type | Installert på | Stat | Angrebar | + ----------- + --------- + ------------------- + ------ + -------------- + --------- + ---------- + | Versjonert | 1.0 | lage bokbord | SQL | | Venter | Ja | + ----------- + --------- + ------------------- + ------ + -------------- + --------- + ---------- + 

Legg merke til den siste kolonnen, Angrebar, som indikerer at Flyway har oppdaget en angre migreringsfil som følger med vår vanlige migreringsfil.

La oss deretter bruke migrasjonene våre:

./flyway migrere

Når den er fullført, er migrasjonene våre fullført, og skjemaet vårt har en ny boktabell:

 Liste over relasjoner Skjema | Navn | Type | Eier -------- + ----------------------- + ------- + -------- - offentlig | bok | bord | baeldung public | flyway_schema_history | bord | baeldung (2 rader) 

3.3. Gjenopprett den siste migrasjonen

Til slutt, la oss angre den siste overføringen ved hjelp av kommandolinjen:

./flyway -pro angre

Etter at kommandoen har kjørt vellykket, kan vi sjekke statusen for overføringene igjen:

./flyway -pro info

som gir oss følgende utgang:

+ ----------- + --------- + ------------------- + ------- --- + --------------------- + --------- + ---------- + | Kategori | Versjon | Beskrivelse | Type | Installert på | Stat | Angrebar | + ----------- + --------- + ------------------- + ------- --- + --------------------- + --------- + ---------- + | Versjonert | 1.0 | lage bokbord | SQL | 2020-08-22 15:48:00 | Angre | | | Angre | 1.0 | lage bokbord | UNDO_SQL | 2020-08-22 15:49:47 | Suksess | | | Versjonert | 1.0 | lage bokbord | SQL | | Venter | Ja | + ----------- + --------- + ------------------- + ------- --- + --------------------- + --------- + ---------- +

Legg merke til hvordan angre har lykkes, og den første overføringen er tilbake til ventende. I motsetning til den første metoden, revisjonsspor viser tydelig migrasjonene som ble rullet tilbake.

Selv om Flyway Undo kan være nyttig, antar det at hele migrasjonen har lyktes. For eksempel fungerer det kanskje ikke som forventet hvis en migrering mislykkes halvveis.

4. Konklusjon

I denne korte opplæringen så vi på å gjenopprette databasen vår ved hjelp av en standard migrering. Vi så også på den offisielle måten å rulle tilbake migrasjoner ved hjelp av Flyway Angre. Som vanlig kan all vår kode som er relatert til denne opplæringen finnes på GitHub.