Vraćanje migracija s Flyway-om

1. Uvod

U ovom kratkom vodiču istražit ćemo nekoliko načina vraćanja migracije pomoću Flywaya.

2. Simulirajte vraćanje pomoću migracije

U ovom ćemo odjeljku vratiti bazu podataka pomoću standardne datoteke za migraciju.

U našim ćemo primjerima koristiti verziju naredbenog retka Flyway. Međutim, osnovni principi jednako su primjenjivi na druge formate, kao što su temeljni API, dodatak Maven itd.

2.1. Stvori migraciju

Prvo, dodajmo novo knjiga tablice u našu bazu podataka. Da bismo to učinili, stvorit ćemo datoteku za migraciju pod nazivom V1_0__create_book_table.sql:

izraditi knjigu tablica (id numerički, naslov varchar (128), autor varchar (256), ograničenje pk_book primarni ključ (id));

Drugo, primijenimo migraciju:

./ flyway migrirati

2.2. Simulirajte vraćanje

Tada, u nekom trenutku, recimo da moramo preokrenuti posljednju migraciju.

Da bi se baza podataka obnovila prije knjiga stvorena je tablica, kreirajmo migraciju pod nazivom V2_0__drop_table_book.sql:

drop table knjiga;

Dalje, primijenimo migraciju:

./ flyway migrirati

Napokon, povijest svih migracija možemo provjeriti pomoću:

./ informacije o letu

što nam daje sljedeći izlaz:

+ ----------- + --------- + ------------------- + ------ + --------------------- + --------- + | Kategorija | Verzija | Opis | Upišite | Instalirano na | Država | + ----------- + --------- + ------------------- + ------ + --------------------- + --------- + | Verzija | 1,0 | stvoriti tablicu knjiga | SQL | 2020-08-29 16:07:43 | Uspjeh | | Verzija | 2,0 | spusti tablicu knjiga | SQL | 2020-08-29 16:08:15 | Uspjeh | + ----------- + --------- + ------------------- + ------ + --------------------- + --------- +

Primijetite da je naša druga migracija uspješno izvršena.

Što se Flywaya tiče, druga datoteka za migraciju je samo još jedna standardna migracija. Stvarno vraćanje baze podataka na prethodnu verziju vrši se u potpunosti putem SQL-a. Na primjer, u našem slučaju, SQL ispuštanja tablice suprotan je prvoj migraciji, koja stvara tablicu.

Koristeći ovu metodu, revizijski trag nam ne pokazuje da je druga migracija povezana s prvom, jer imaju različite brojeve verzija. Da bismo dobili takav revizijski trag, moramo upotrijebiti Flyway Undo.

3. Korištenje Flyway Undo

Prvo, važno je to napomenuti Flyway Undo komercijalna je značajka Flyway-a i nije dostupna u izdanju zajednice. Stoga će nam biti potrebno izdanje Pro ili Enterprise Edition kako bismo mogli koristiti ovu značajku.

3.1. Stvorite datoteke za migraciju

Prvo stvorimo datoteku za migraciju pod nazivom V1_0__create_book_table.sql:

izraditi knjigu tablica (id numerički, naslov varchar (128), autor varchar (256), ograničenje pk_book primarni ključ (id));

Drugo, izradimo odgovarajuću datoteku za poništavanje migracije U1_0__create_book_table.sql:

drop table knjiga;

U našoj poništavanju migracije primijetite kako je prefiks imena datoteke ‘U’ u usporedbi s normalnim prefiksom migracije od ‘V’. Također, u našim datotekama za poništavanje migracije, napišemo SQL koji poništava promjene odgovarajuće migracijske datoteke. U našem slučaju ispuštamo tablicu koja je stvorena normalnom migracijom.

3.2. Primijeni migracije

Dalje, provjerimo trenutno stanje migracija:

./flyway -pro info

To nam daje sljedeći izlaz:

+ ----------- + --------- + ------------------- + ------ + -------------- + --------- + ---------- + | Kategorija | Verzija | Opis | Upišite | Instalirano na | Država | Ne može se izvršiti | + ----------- + --------- + ------------------- + ------ + -------------- + --------- + ---------- + | Verzija | 1,0 | stvoriti tablicu knjiga | SQL | | Na čekanju | Da | + ----------- + --------- + ------------------- + ------ + -------------- + --------- + ---------- + 

Primijetite zadnji stupac, Neizvodljivo, što znači da je Flyway otkrio poništenu datoteku za migraciju koja prati našu uobičajenu datoteku za migraciju.

Dalje, primijenimo naše migracije:

./ flyway migrirati

Kada se dovrši, naše su migracije dovršene, a naša shema ima novu tablicu knjiga:

 Popis odnosa Shema | Ime | Upišite | Vlasnik -------- + ----------------------- + ------- + -------- - javni | knjiga | stol | baeldung javnost | flyway_schema_history | stol | baeldung (2 reda) 

3.3. Vraćanje posljednje migracije

Konačno, poništimo posljednju migraciju pomoću naredbenog retka:

./flyway -pro poništi

Nakon uspješnog izvođenja naredbe, možemo ponovno provjeriti status migracije:

./flyway -pro info

što nam daje sljedeći izlaz:

+ ----------- + --------- + ------------------- + ------- --- + --------------------- + --------- + ---------- + | Kategorija | Verzija | Opis | Upišite | Instalirano na | Država | Ne može se izvršiti | + ----------- + --------- + ------------------- + ------- --- + --------------------- + --------- + ---------- + | Verzija | 1,0 | stvoriti tablicu knjiga | SQL | 2020-08-22 15:48:00 | Poništeno | | | Poništi | 1,0 | stvoriti tablicu knjiga | UNDO_SQL | 2020-08-22 15:49:47 | Uspjeh | | | Verzija | 1,0 | stvoriti tablicu knjiga | SQL | | Na čekanju | Da | + ----------- + --------- + ------------------- + ------- --- + --------------------- + --------- + ---------- +

Primijetite kako je poništavanje bilo uspješno i prva migracija je na čekanju. Također, za razliku od prve metode, revizijski trag jasno pokazuje vraćene migracije.

Iako Flyway Undo može biti koristan, pretpostavlja se da je cijela migracija uspjela. Na primjer, možda neće raditi kako se očekivalo ako migracija ne uspije na dijelu.

4. Zaključak

U ovom kratkom vodiču pogledali smo obnavljanje naše baze podataka pomoću standardne migracije. Također smo pogledali službeni način vraćanja migracija pomoću Flyway Undo. Kao i obično, sav naš kôd koji se odnosi na ovu lekciju možete pronaći na GitHubu.