0Pricing
Learn Rust Coding · Урок

Миграции

Развитие схемы

«Миграции» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Зачем нужны миграции?

Миграция — это версионируемое изменение схемы базы данных, например добавление таблицы или столбца. Миграции позволяют безопасно и воспроизводимо развивать схему.

  • Отслеживаются в системе контроля версий
  • Применяются по порядку и ровно один раз

Инструмент sqlx-cli

sqlx поставляется с CLI для управления миграциями. Установите его один раз с помощью cargo.

cargo install sqlx-cli --no-default-features --features postgres

Создание миграции

sqlx migrate add создаёт SQL-файл с отметкой времени в папке migrations/. Отметка времени определяет порядок.

sqlx migrate add create_users

Написание SQL миграции

Каждый файл миграции содержит SQL-код для изменения схемы. Размещайте одно логическое изменение в одном файле.

CREATE TABLE users (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT
);

Запуск миграций

sqlx migrate run применяет все ожидающие миграции к DATABASE_URL, записывая каждую из них в таблицу отслеживания.

sqlx migrate run

Таблица отслеживания

sqlx записывает применённые миграции в _sqlx_migrations, сохраняя версию и контрольную сумму, чтобы не применять миграцию повторно и не допускать её незаметного изменения.

Обратимые миграции

Добавьте флаг -r, чтобы создать отдельные файлы для применения и отката миграции. sqlx migrate revert запускает последний файл отката.

sqlx migrate add -r create_posts

Моделирование отслеживания миграций

Запускатель миграций применяет только версии, которые новее последней применённой версии. Этот исполняемый пример моделирует такое решение.

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));
}

Встраивание миграций в двоичный файл

Макрос migrate! встраивает папку миграций в двоичный файл, поэтому приложение может применить их при запуске; в рабочей среде CLI не требуется.

use sqlx::{Pool, Postgres};

async fn migrate(pool: &Pool<Postgres>) {
    sqlx::migrate!("./migrations")
        .run(pool)
        .await
        .unwrap();
}

Контрольные суммы и неизменяемость

Никогда не изменяйте уже выполненную миграцию. sqlx хранит контрольную сумму и откажется продолжать работу, если содержимое прошлой миграции изменилось. Вместо этого добавьте новую миграцию.

Идемпотентный SQL

Защищайте инструкции с помощью IF NOT EXISTS, чтобы повторный запуск в чистой среде был безопасным и предсказуемым.

CREATE TABLE IF NOT EXISTS tags (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL UNIQUE
);

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

Проверьте своё понимание миграций.

Итоги

Вы изучили миграции схемы:

  • Миграции — это упорядоченные версионируемые изменения схемы
  • sqlx migrate add/run/revert управляют ими
  • Применённые версии и контрольные суммы хранятся в _sqlx_migrations
  • migrate! встраивает их для применения при запуске
  • Никогда не изменяйте применённую миграцию; добавьте новую

На этом курс по sqlx завершён.

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

Урок «Миграции» бесплатный?

Да — полный текст урока «Миграции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Миграции»?

Развитие схемы Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

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

Сколько времени занимает урок «Миграции»?

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

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

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

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

  1. Подключение к базе данных
  2. Запросы с проверкой во время компиляции
  3. Операции CRUD
  4. Миграции
← Назад к Learn Rust Coding