0Pricing
Learn Rust Coding · Lekcja

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 postgres

Tworzenie migracji

sqlx migrate add tworzy plik SQL ze znacznikiem czasu w folderze migrations/. Znacznik czasu określa kolejność.

sqlx migrate add create_users

Pisanie 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 run

Tabela ś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_posts

Modelowanie ś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/revert sł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.

Wszystkie lekcje w tym kursie

  1. Łączenie z bazą danych
  2. Zapytania sprawdzane podczas kompilacji
  3. Operacje CRUD
  4. Migracje
← Powrót do Learn Rust Coding