Миграции
Развитие схемы
«Миграции» — бесплатный урок 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 — локальная установка не требуется.