Migracje
Ewolucja schematu
Migracje to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.
Dlaczego migracje?
Migracja to wersjonowana zmiana schematu bazy danych, na przykład dodanie tabeli lub kolumny. Migracje pozwalają bezpiecznie i powtarzalnie rozwijać schemat.
- Są śledzone w systemie kontroli wersji
- Są stosowane w kolejności, dokładnie raz
Narzędzie sqlx-cli
sqlx udostępnia CLI do zarządzania migracjami. Zainstaluj je raz za pomocą cargo.
cargo install sqlx-cli --no-default-features --features postgresTworzenie migracji
sqlx migrate add tworzy plik SQL ze znacznikiem czasu w folderze migrations/. Znacznik czasu określa kolejność.
sqlx migrate add create_usersPisanie SQL migracji
Każdy plik migracji zawiera SQL potrzebny do zmiany schematu. Umieszczaj jedną logiczną zmianę w każdym pliku.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT
);Uruchamianie migracji
sqlx migrate run stosuje wszystkie oczekujące migracje względem DATABASE_URL, zapisując każdą z nich w tabeli śledzenia.
sqlx migrate runTabela śledzenia
sqlx zapisuje zastosowane migracje w _sqlx_migrations, przechowując wersję i sumę kontrolną, dzięki czemu nigdy nie zastosuje migracji ponownie ani nie zmieni jej po cichu.
Odwracalne migracje
Dodaj flagę -r, aby utworzyć osobne pliki up i down umożliwiające wycofanie zmian. sqlx migrate revert uruchamia najnowszy plik down.
sqlx migrate add -r create_postsModelowanie śledzenia migracji
Mechanizm uruchamiający migracje stosuje tylko wersje nowsze od ostatniej zastosowanej. Ten uruchamialny przykład modeluje tę decyzję.
fn pending(all: &[u32], applied: u32) -> Vec<u32> {
all.iter().cloned().filter(|v| *v > applied).collect()
}
fn main() {
let migrations = [1, 2, 3, 4];
let last_applied = 2;
println!("{:?}", pending(&migrations, last_applied));
}Osadzanie migracji w pliku binarnym
Makro migrate! osadza folder migracji w pliku binarnym, dzięki czemu aplikacja może zastosować je podczas uruchamiania; w środowisku produkcyjnym nie jest wtedy potrzebne CLI.
use sqlx::{Pool, Postgres};
async fn migrate(pool: &Pool<Postgres>) {
sqlx::migrate!("./migrations")
.run(pool)
.await
.unwrap();
}Sumy kontrolne i niezmienność
Nigdy nie edytuj migracji, która została już uruchomiona. sqlx przechowuje sumę kontrolną i odmówi dalszego działania, jeśli zawartość wcześniejszej migracji się zmieni. Zamiast tego dodaj nową migrację.
Idempotentny SQL
Zabezpieczaj instrukcje za pomocą IF NOT EXISTS, aby ponowne uruchomienie w świeżym środowisku było bezpieczne i przewidywalne.
CREATE TABLE IF NOT EXISTS tags (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE
);Szybki test
Sprawdź swoją wiedzę na temat migracji.
Podsumowanie
Nauczyłeś się korzystać z migracji schematu:
- Migracje to uporządkowane, wersjonowane zmiany schematu
sqlx migrate add/run/revertsłuży do zarządzania nimi- Zastosowane wersje i sumy kontrolne są przechowywane w
_sqlx_migrations migrate!osadza je w celu zastosowania podczas uruchamiania- Nigdy nie edytuj zastosowanej migracji — dodaj nową
To kończy kurs sqlx.
Często zadawane pytania
Czy lekcja „Migracje” jest bezpłatna?
Tak — pełny tekst „Migracje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.
Co nauczysz się w „Migracje”?
Ewolucja schematu Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?
Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Migracje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?
Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.