SQL Academy · Lekcja

CI dla zmian schematu (GitHub Actions)

Uruchamiać migracje, dbt build i lintowanie SQLFluff w GitHub Actions przy każdym PR, korzystając z efemerycznych baz danych

Lekcja 4 z 414 kroki

CI dla zmian schematu (GitHub Actions) to bezpłatna lekcja SQL Academy 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 SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Dlaczego CI dla SQL?

Ręczne migracje powodują awarie. CI wykrywa:

  • Migrację, której nie można zastosować
  • Migrację, która powoduje niepowodzenie istniejących testów
  • Rozbieżności schematu między środowiskami
  • Regresje w lintowaniu i testach

Solidny potok CI dla SQL

  1. Uruchom tymczasową instancję Postgresa (Docker / usługa GitHub Actions)
  2. Zastosuj wszystkie migracje od początku
  3. Zastosuj tylko nowe migracje do kopii schematu środowiska stagingowego
  4. Uruchom dbt build / Flyway test / testy aplikacji
  5. Uruchom lintowanie SQLFluff
  6. Wygeneruj raport różnic schematu

GitHub Actions: usługa Postgresa

Uruchom Postgresa obok zadania:

name: ci
on: [pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      pg:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: postgres
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - name: Run migrations
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres
        run: |
          ./scripts/migrate.sh

Etap lintowania

Lintowanie za pomocą SQLFluff jako osobne zadanie:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
      - run: pip install sqlfluff && sqlfluff lint models/

Budowanie dbt w CI

W projektach dbt:

- name: dbt deps & build
  run: |
    pip install dbt-postgres
    dbt deps
    dbt build --profiles-dir profiles/ci

Różnice schematu

migra (lub apgdiff, schemahero) pokazuje zmiany wprowadzane przez migrację:

pip install migra
migra postgres://baseline postgres://branch > diff.sql
# Comment diff.sql on the PR

Strategia migracji wyłącznie do przodu

Zawsze twórz nowe migracje; nigdy nie edytuj już zastosowanych. CI sprawdza, czy sekwencję migracji można zastosować od początku.

Wstecznie kompatybilne zmiany schematu

Schemat w każdym PR-ze powinien pozostać kompatybilny z poprzednią wersją aplikacji, aby można było wdrożyć aplikację i bazę danych w dowolnej kolejności. CI może to zweryfikować, uruchamiając testy STAREJ aplikacji na NOWYM schemacie.

Inicjalizacja danych testowych

Niewielki skrypt z danymi testowymi w CI pozwala uruchamiać testy na realistycznych danych:

- name: Seed
  run: psql $DATABASE_URL < seed/dev.sql

Limity czasu blokad w testach migracji

Ustaw lock_timeout w migracjach uruchamianych przez CI, aby odwzorować zachowanie środowiska produkcyjnego:

ALTER DATABASE postgres SET lock_timeout = '5s';

Wdrażanie na produkcji

W przypadku migracji produkcyjnych użyj zadania uruchamianego jednorazowo:

  • Narzędzie do uruchamiania migracji z ponawianiem prób
  • Powiadomienia o niepowodzeniu
  • Udokumentowana procedura wycofania zmian

Wzorzec rozgałęziania bazy danych

Narzędzia takie jak Neon i rozgałęzianie Supabase pozwalają utworzyć kopię produkcji dla każdego PR-a — można na niej uruchamiać migracje i testy aplikacji, korzystając z kopii zawierającej rzeczywiste dane.

Podsumowanie

SQL należy umieścić w CI.

  • Uruchamiaj tymczasową usługę PG
  • Stosuj migracje i uruchamiaj dbt build
  • Wykonuj lintowanie za pomocą SQLFluff
  • Uruchamiaj testy aplikacji na zmigrowanym schemacie
  • Porównuj schematy na potrzeby przeglądu

Szybki test

Jaki jest najprostszy sposób dodania bazy danych Postgres do zadania GitHub Actions?

Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
46
Lekcje
183

Często zadawane pytania

Czy lekcja „CI dla zmian schematu (GitHub Actions)” jest bezpłatna?

Tak — pełny tekst „CI dla zmian schematu (GitHub Actions)” 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 SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „CI dla zmian schematu (GitHub Actions)”?

Uruchamiać migracje, dbt build i lintowanie SQLFluff w GitHub Actions przy każdym PR, korzystając z efemerycznych baz danych Ćwiczysz SQL Academy 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ąć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy 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 „CI dla zmian schematu (GitHub Actions)”?

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 SQL Academy?

Tak. Każda lekcja SQL Academy 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. Podstawy DBT (Data Build Tool)
  2. SQLFluff i lintowanie
  3. Testowanie SQL: testy dbt, Great Expectations
  4. CI dla zmian schematu (GitHub Actions)
← Powrót do SQL Academy