Rust und PostgreSQL: Leistungsstarke Abfragen ohne Schmerz schreiben

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Rust und PostgreSQL: Ein Duo, das Ihren Code schneller macht

\n\n

Haben Sie sich jemals gefragt, warum immer mehr Backend-Entwickler auf Rust umsteigen? Die Antwort ist einfach: Rust gibt Ihnen Kontrolle über Speicher und Geschwindigkeit, und PostgreSQL über die Daten. Zusammen bilden sie eine Kombination, die eine Last von Hunderttausenden von Abfragen pro Sekunde ohne "Ruckeln" oder Speicherlecks bewältigen kann.

\n\n

In diesem Leitfaden werden wir durchgehen, wie man Rust und PostgreSQL miteinander verbindet. Sie erfahren, wie Sie eine Verbindung einrichten, Abfragen ausführen, SQL-Injection vermeiden und asynchrone Anwendungen erstellen. Los geht's!

\n\n

Warum gerade Rust und PostgreSQL?

\n\n

Rust ist nicht nur eine modische Sprache. Sein Besitzsystem (ownership) und der borrow checker garantieren, dass Sie keinen null pointer oder hängende Referenzen erhalten. Und PostgreSQL ist nicht nur eine Datenbank. Es ist ein leistungsstarkes Werkzeug mit Unterstützung für JSON, Volltextsuche und komplexe Transaktionen.

\n\n

Wenn Sie Rust und PostgreSQL kombinieren, erhalten Sie:

\n
    \n
  • Sicherheit — Rust verhindert, dass Sie versehentlich ungültiges SQL senden.
  • \n
  • Leistung — asynchrone Treiber arbeiten auf C-Niveau.
  • \n
  • Kontrolle — Sie entscheiden selbst, wann und wie Sie Daten abrufen.
  • \n
\n\n

Installation und Einrichtung der Umgebung

\n\n

Bevor Sie Code schreiben, stellen Sie sicher, dass Folgendes installiert ist:

\n
    \n
  • Rust (neueste stabile Version) — rustup update
  • \n
  • PostgreSQL (lokal oder über Docker) — docker run --name pg -e POSTGRES_PASSWORD=pass -p 5432:5432 -d postgres
  • \n
  • Die Bibliothek libpq-dev (für Linux) oder ihr Äquivalent auf Mac/Windows
  • \n
\n\n

Erstellen Sie ein neues Projekt:

\n\n
cargo new rust-postgres-guide\ncd rust-postgres-guide
\n\n

Treiberauswahl: tokio-postgres vs sqlx

\n\n

Es gibt zwei Hauptansätze für die Arbeit mit PostgreSQL in Rust:

\n
    \n
  • tokio-postgres — ein asynchroner Low-Level-Treiber. Bietet volle Kontrolle.
  • \n
  • sqlx — ein asynchroner High-Level-Treiber mit Abfrageprüfung zur Kompilierzeit.
  • \n
\n\n

Für fortgeschrittene Projekte empfehle ich sqlx — es ist bequemer und sicherer. Für maximale Kontrolle verwenden Sie jedoch tokio-postgres.

\n\n

Fügen wir die Abhängigkeiten in Cargo.toml hinzu:

\n\n
[dependencies]\ntokio = { version = "1", features = ["full"] }\nsqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres"] }\nserde = { version = "1", features = ["derive"] }\n
\n\n

Erste Verbindung: Rust und PostgreSQL treffen sich

\n\n

Schreiben wir ein einfaches Beispiel, das eine Verbindung zur Datenbank herstellt und die PostgreSQL-Version zurückgibt.

\n\n
use sqlx::postgres::PgPoolOptions;\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n    // Verbindungszeichenfolge: postgres://user:password@host:port/db\n    let database_url = "postgres://postgres:pass@localhost:5432/postgres";\n    \n    // Erstellen eines Verbindungspools (wiederverwendbare Verbindungen)\n    let pool = PgPoolOptions::new()\n        .max_connections(5)\n        .connect(database_url)\n        .await?;\n\n    // Abfrage ausführen\n    let row: (String,) = sqlx::query_as("SELECT version()")\n        .fetch_one(&pool)\n        .await?;\n\n    println!("PostgreSQL version: {}", row.0);\n    Ok(())\n}
\n\n

Führen Sie den Code aus: cargo run. Wenn alles richtig eingerichtet ist, sehen Sie die PostgreSQL-Version. Beachten Sie PgPoolOptions — der Verbindungspool ist für die Produktion obligatorisch. Er verwendet Verbindungen wieder und erstellt sie nicht für jede Abfrage neu.

\n\n

Erstellen von Tabellen und CRUD-Operationen

\n\n

Lassen Sie uns nun eine Tabelle users erstellen und grundlegende Operationen durchführen: Einfügen, Lesen, Aktualisieren, Löschen.

\n\n

Migration: Tabelle erstellen

\n\n

In sqlx sind Migrationen separate SQL-Dateien. Erstellen Sie einen Ordner migrations und eine Datei

Blogs

Buchempfehlungen