マイグレーション
スキーマを進化させます
「マイグレーション」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
なぜマイグレーションが必要なのか
マイグレーションは、テーブルやカラムの追加など、データベーススキーマに対するバージョン管理された変更です。スキーマを安全かつ再現可能な形で発展させられます。
- バージョン管理システムで追跡できます
- 順番どおりに、正確に1回だけ適用されます
sqlx-cliツール
sqlxにはマイグレーションを管理するCLIが用意されています。cargoで一度インストールします。
cargo install sqlx-cli --no-default-features --features postgresマイグレーションの作成
sqlx migrate addは、migrations/フォルダーにタイムスタンプ付きのSQLファイルを作成します。タイムスタンプによって順序が決まります。
sqlx migrate add create_usersマイグレーションSQLの記述
各マイグレーションファイルには、スキーマを次の状態へ進めるSQLを記述します。1ファイルにつき1つの論理的な変更にします。
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フラグを追加すると、up用とdown用のファイルを分けてロールバックできるようになります。sqlx migrate revertは直近のdownファイルを実行します。
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時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「マイグレーション」で何を学びますか?
スキーマを進化させます ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「マイグレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- データベースへの接続
- コンパイル時に検査されるクエリ
- CRUD操作
- マイグレーション