0Pricing
SQL Academy · Урок

CI для изменений схемы (GitHub Actions)

Запускайте миграции, сборку dbt и проверку SQLFluff внутри GitHub Actions при каждом PR, используя временные базы данных

«CI для изменений схемы (GitHub Actions)» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Зачем нужен CI для SQL?

Ручные миграции приводят к сбоям. Непрерывная интеграция выявляет:

  • миграцию, которую не удаётся применить
  • миграцию, нарушающую существующие тесты
  • расхождение схем между окружениями
  • регрессии линтинга и тестов

Надёжный конвейер CI для SQL

  1. Запустить временный Postgres (Docker / сервис GitHub Actions)
  2. Применить все миграции с нуля
  3. Применить только новые миграции к копии схемы промежуточного окружения
  4. Запустить dbt build / тест Flyway / тесты приложения
  5. Выполнить линтинг с помощью SQLFluff
  6. Сформировать отчёт о различиях схем

Сервис Postgres в GitHub Actions

Запустите Postgres одновременно с заданием:

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

Шаг линтинга

Запустите линтинг SQLFluff в отдельном задании:

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

Сборка dbt в CI

Для проектов dbt:

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

Сравнение схем

migra (или apgdiff, schemahero) показывает, какие изменения вносит миграция:

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

Стратегия только прямых миграций

Всегда создавайте новые миграции и никогда не редактируйте уже применённые. CI проверяет, что последовательность миграций применяется с нуля.

Изменения схемы с обратной совместимостью

Схема каждого PR должна оставаться совместимой с предыдущей версией приложения, чтобы приложение и базу данных можно было развернуть в любом порядке. CI может проверить это, запустив тесты OLD приложения для NEW схемы.

Заполнение тестовыми данными

Небольшой скрипт с тестовыми данными в CI позволяет запускать тесты на реалистичных данных:

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

Тайм-ауты блокировок в тестах миграций

Задайте lock_timeout в миграциях CI, чтобы имитировать поведение в рабочей среде:

ALTER DATABASE postgres SET lock_timeout = '5s';

Применение в рабочей среде

Для миграций в рабочей среде используйте одноразовое задание:

  • средство запуска миграций с повторными попытками
  • уведомления о сбоях
  • задокументированная процедура отката

Шаблон базы данных для ветки

Такие инструменты, как ветвление Neon и Supabase, позволяют создать копию рабочей базы для каждого PR — запускать миграции и тесты приложения на копии с реальными данными.

Итоги

SQL должен проходить через CI.

  • Запускайте временный сервис PG
  • Применяйте миграции и выполняйте сборку dbt
  • Выполняйте линтинг с помощью SQLFluff
  • Запускайте тесты приложения для схемы после миграции
  • Сравнивайте схемы для проверки при просмотре изменений

Быстрая проверка

Как проще всего добавить базу данных Postgres в задание GitHub Actions?

Часто задаваемые вопросы

Урок «CI для изменений схемы (GitHub Actions)» бесплатный?

Да — полный текст урока «CI для изменений схемы (GitHub Actions)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «CI для изменений схемы (GitHub Actions)»?

Запускайте миграции, сборку dbt и проверку SQLFluff внутри GitHub Actions при каждом PR, используя временные базы данных Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «CI для изменений схемы (GitHub Actions)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы DBT (Data Build Tool)
  2. SQLFluff и статический анализ
  3. Тестирование SQL: тесты dbt и Great Expectations
  4. CI для изменений схемы (GitHub Actions)
← Назад к SQL Academy