Datenbankmigrationen in Rust: Überblick über Tools und Bibliotheken
\n\nBei der Entwicklung jeder Anwendung wird früher oder später die Notwendigkeit entstehen, die Datenbankstruktur zu ändern. Das Hinzufügen neuer Spalten, das Erstellen von Indizes oder das Umbenennen von Tabellen – all dies erfordert eine sorgfältige Versionsverwaltung des Schemas. Im Rust-Ökosystem gibt es mehrere ausgereifte Lösungen zur Durchführung von Migrationen. In diesem Artikel betrachten wir die wichtigsten Ansätze und Bibliotheken, die für Aufgaben der DB-Schemaverwaltung verfügbar sind.
\n\nWozu sind Migrationen nötig?
\nMigrationen ermöglichen:
\n- \n
- Versionierung von Änderungen – jede Migration stellt eine separate Datei mit einer Versionsnummer dar. \n
- Automatisierung des Deployments – Änderungen beim Deployment einspielen und zurücksetzen. \n
- Teamarbeit – alle Entwickler synchronisieren das Schema lokal. \n
- Vermeidung von Fehlern – Migrationen schützen vor versehentlichen Datenänderungen. \n
Wichtigste Tools für Migrationen in Rust
\n\n1. Diesel Migration (integriert in Diesel ORM)
\nDiesel ist das beliebteste ORM für Rust. Es bietet eine integrierte Engine für Migrationen über das CLI-Tool diesel_cli.
Hauptfunktionen:
\n- \n
- Generierung von Migrationsdateien mit SQL-Abfragen. \n
- Unterstützung für PostgreSQL, MySQL, SQLite. \n
- Befehle:
migration generate,migration run,migration redo. \n - Automatische Nachverfolgung angewendeter Migrationen. \n
Beispiel für das Erstellen und Anwenden einer Migration:
\n# CLI installieren\ncargo install diesel_cli --no-default-features --features postgres\n\n# Neue Migration erstellen\ndiesel migration generate create_users\n\n# Im Ordner migrations/ erscheinen zwei SQL-Dateien:\n# up.sql — Code zum Einspielen\n# down.sql — Code zum Zurücksetzen\n\n# Migration anwenden\ndiesel migration run\nInhalt von up.sql:
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);\ndown.sql:
DROP TABLE IF EXISTS users;\n\n2. SQLx migrate (Teil des SQLx-Ökosystems)
\nSQLx ist ein asynchroner Treiber für SQL-Datenbanken. Sein Migrations-Subsystem arbeitet ohne ORM, nur mit reinen SQL-Skripten.
\nBesondere Merkmale:
\n- \n
- Unterstützung für PostgreSQL, MySQL, SQLite, MSSQL. \n
- Integration mit CLI und programmatischer Start aus dem Code. \n
- Möglichkeit der Verwendung von Rust-Code für Prüfungen vor der Migration. \n
- Automatische Integritätsprüfung (Datei-Hashes). \n
Beispiel für den programmatischen Start von Migrationen in Rust:
\nuse 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 // Pfad zum Migrationsordner angeben\n let migrator = Migrator::new(std::path::Path::new("./migrations")).await?;\n \n // Alle nicht angewendeten Migrationen ausführen\n migrator.run(&pool).await?;\n \n println!("Migrationen erfolgreich ausgeführt!");\n Ok(())\n}\nStruktur des Ordners migrations/:
migrations/\n├── 20231001_initial.sql\n├── 20231002_add_email_index.sql\n└── 20231003_create_roles.sql\nJede Datei enthält normales SQL, zum Beispiel:
\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\n3. SeaORM Migrator (Teil von SeaORM)
\nSeaORM ist ein modernes asynchrones ORM, das ein eigenes Migrationssystem SeaORM Migrator anbietet. Es ermöglicht, Migrationen in Rust statt in SQL zu schreiben, was d
Auch in der Bibliothek
csv für Rust: vollständige Anleitung mit Beispielen
Ardalis.SmartEnum für C# (.NET): Vollständige Anleitung mit Beispielen
Valibot für TypeScript: Komplettguide mit Beispielen
Generierung von PDF-Berichten in PHP: Bibliotheksübersicht und Codebeispiele