ترحيلات قواعد البيانات في Rust: نظرة عامة على الأدوات والمكتبات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ترحيلات قواعد البيانات في Rust: نظرة عامة على الأدوات والمكتبات

\n\n

عند تطوير أي تطبيق، عاجلاً أم آجلاً، تنشأ الحاجة إلى تغيير هيكل قاعدة البيانات. إضافة أعمدة جديدة، إنشاء فهارس أو إعادة تسمية الجداول - كل هذا يتطلب إدارة دقيقة لإصدارات المخطط. في نظام Rust البيئي، توجد عدة حلول ناضجة لتنفيذ الترحيلات. في هذه المقالة، سنستعرض الأساليب والمكتبات الرئيسية المتاحة لمهام إدارة مخطط قاعدة البيانات.

\n\n

لماذا نحتاج الترحيلات؟

\n

تتيح الترحيلات:

\n
    \n
  • إدارة إصدارات التغييرات - يمثل كل ترحيل ملفًا منفصلاً برقم إصدار.
  • \n
  • أتمتة النشر - تطبيق وتراجع التغييرات أثناء النشر.
  • \n
  • العمل الجماعي - مزامنة جميع المطورين للمخطط محليًا.
  • \n
  • تجنب الأخطاء - تحمي الترحيلات من التغيير العشوائي للبيانات.
  • \n
\n\n

الأدوات الرئيسية للترحيلات في Rust

\n\n

1. Diesel Migration (مدمج في Diesel ORM)

\n

Diesel هو أشهر ORM لـ Rust. يوفر محرك ترحيلات مدمجًا عبر أداة CLI diesel_cli.

\n

الإمكانيات الرئيسية:

\n
    \n
  • إنشاء ملفات الترحيل مع استعلامات SQL.
  • \n
  • دعم PostgreSQL، MySQL، SQLite.
  • \n
  • الأوامر: migration generate، migration run، migration redo.
  • \n
  • تتبع تلقائي للترحيلات المطبقة.
  • \n
\n

مثال على إنشاء وتطبيق الترحيل:

\n
# تثبيت CLI\ncargo install diesel_cli --no-default-features --features postgres\n\n# إنشاء ترحيل جديد\ndiesel migration generate create_users\n\n# في مجلد migrations/ سيظهر ملفا SQL:\n# up.sql - كود التطبيق\n# down.sql - كود التراجع\n\n# تطبيق الترحيل\ndiesel migration run
\n

محتوى up.sql:

\n
CREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL,\n    created_at TIMESTAMP DEFAULT NOW()\n);
\n

down.sql:

\n
DROP TABLE IF EXISTS users;
\n\n

2. SQLx migrate (جزء من نظام SQLx البيئي)

\n

SQLx هو مشغل غير متزامن لقواعد بيانات SQL. نظام الترحيلات الخاص به يعمل بدون ORM، فقط مع نصوص SQL النقية.

\n

الخصائص المميزة:

\n
    \n
  • دعم PostgreSQL، MySQL، SQLite، MSSQL.
  • \n
  • التكامل مع CLI والتشغيل البرمجي من الكود.
  • \n
  • إمكانية استخدام كود Rust للتحقق قبل الترحيل.
  • \n
  • التحقق التلقائي من التكامل (تجزئة الملفات).
  • \n
\n

مثال على التشغيل البرمجي للترحيلات في Rust:

\n
use sqlx::migrate::Migrator;\nuse sqlx::PgPool;\n\n#[tokio::main]\nasync fn main() -> Result<(), sqlx::Error> {\n    let pool = PgPool::connect("postgres://user:pass@localhost/db").await?;\n    \n    // تحديد المسار إلى مجلد الترحيلات\n    let migrator = Migrator::new(std::path::Path::new("./migrations")).await?;\n    \n    // تشغيل جميع الترحيلات غير المطبقة\n    migrator.run(&pool).await?;\n    \n    println!("تم تنفيذ الترحيلات بنجاح!");\n    Ok(())\n}
\n

هيكل مجلد migrations/:

\n
migrations/\n├── 20231001_initial.sql\n├── 20231002_add_email_index.sql\n└── 20231003_create_roles.sql
\n

يحتوي كل ملف على SQL عادي، على سبيل المثال:

\n
-- 20231001_initial.sql\nCREATE TABLE IF NOT EXISTS users (\n    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    username TEXT NOT NULL UNIQUE\n);
\n\n

3. SeaORM Migrator (جزء من SeaORM)

\n

SeaORM هو ORM غير متزامن حديث، يقدم نظام الترحيلات الخاص به SeaORM Migrator. يسمح بكتابة الترحيلات بلغة Rust بدلاً من SQL، مما ي

توصيات