https://github.com/felixwieland/dhbw-ti23-rust-postgres
DHBW Datenbankenvorlesung Rust und Postgres
https://github.com/felixwieland/dhbw-ti23-rust-postgres
example postgres rust tokio tokio-postgres
Last synced: about 2 months ago
JSON representation
DHBW Datenbankenvorlesung Rust und Postgres
- Host: GitHub
- URL: https://github.com/felixwieland/dhbw-ti23-rust-postgres
- Owner: FelixWieland
- Created: 2024-11-22T11:43:05.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2024-11-25T08:00:35.000Z (6 months ago)
- Last Synced: 2025-02-02T03:44:37.903Z (4 months ago)
- Topics: example, postgres, rust, tokio, tokio-postgres
- Language: Rust
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# PostgreSQL mit `tokio-postgres` in Rust
Dieses Projekt zeigt ein einfaches Beispiel für die Nutzung von PostgreSQL mit der Rust-Bibliothek `tokio-postgres`. Es enthält eine Datenbankverbindung, eine Transaktion zum Einfügen von Daten und grundlegende Abfragen.
## Voraussetzungen
### 1. Installierte Software
Um dieses Projekt auszuführen, benötigen Sie:
- **Rust**: Installieren Sie die neueste Version von Rust mit [rustup](https://rustup.rs/).
- **Docker**: Installieren Sie Docker und Docker Compose, um die PostgreSQL-Datenbank aufzusetzen.## Projektstruktur
### Dateien
- `src/main.rs`: Der Rust-Code mit der Verbindung zur PostgreSQL-Datenbank und einem Beispiel für Transaktionen.
- `Cargo.toml`: Die Projektabhängigkeiten.---
## Installation
### 1. Rust-Projekt einrichten
Klonen Sie dieses Repository und wechseln Sie in das Verzeichnis:
```bash
git clone https://github.com/FelixWieland/dhbw-ti23-rust-postgres
cd dhbw-ti23-rust-postgres
```Installieren Sie die Abhängigkeiten:
```bash
cargo build
```Passen Sie `user`, `password` und `dbname` entsprechend an, wenn Sie andere Werte in `docker-compose.yml` verwendet haben.
---
## Beispiel ausführen
1. Starten Sie die PostgreSQL-Datenbank mit Docker Compose (falls noch nicht geschehen):
```bash
docker-compose up -d
```2. Führen Sie das Programm aus:
```bash
cargo run
```Wenn alles korrekt eingerichtet ist, sollten Sie in der Konsole eine Bestätigung über den erfolgreichen Datenbankeintrag sehen:
```
Tabelle 'users' erstellt.
Transaktion gestartet.
Daten eingefügt: Name = Bob, Alter = 25.
Daten aktualisiert: Name = Bob, Alter = 30.
Abgefragte Daten - ID: 2, Name: Bob, Alter: 30
Daten gelöscht: Name = Bob.
Transaktion erfolgreich festgeschrieben.
```---
## Erklärung des Codes
### 1. Datenbankverbindung
Die Verbindung zur Datenbank wird mit `tokio-postgres` hergestellt:
```rust
let (client, connection) = tokio_postgres::connect(
"host=localhost user=postgres password=postgres dbname=postgres",
NoTls,
)
.await?;
```- `host`: Die IP oder der Hostname der Datenbank (`localhost` für Docker Compose).
- `user`: Der Benutzername (`postgres`).
- `password`: Das Passwort (`postgres`).
- `dbname`: Der Name der Datenbank (`postgres`).Die Verbindung läuft in einem separaten Task, um die Asynchronität zu gewährleisten.
### 2. Transaktion
Daten werden in einer Transaktion eingefügt:
```rust
let transaction = client.transaction().await?;
transaction
.execute(
"INSERT INTO users (name, age) VALUES ($1, $2)",
&[&"Bob", &25],
)
.await?;
transaction.commit().await?;
```- `$1` und `$2` sind Platzhalter für Parameter.
- Die Parameter werden als Referenzen übergeben, z. B. `&"Bob"` und `&25`.### 3. Abfragen und Verarbeitung
Ein Beispiel für eine Abfrage und den Abruf von Daten:
```rust
let row = client
.query_one("SELECT name FROM users WHERE id = $1", &[&1])
.await?;
let name: String = row.get(0);
println!("User name: {}", name);
```---
## Nützliche Befehle
### Docker
- **Container stoppen**:
```bash
docker-compose down
```- **Logs anzeigen**:
```bash
docker-compose logs
```### PostgreSQL-Datenbank
Um sich mit der Datenbank zu verbinden:
```bash
docker exec -it rust_postgres_example_db psql -U postgres -d postgres
```---
## Fehlerbehebung
1. **Verbindungsfehler**:
- Stellen Sie sicher, dass der Docker-Container läuft:
```bash
docker ps
```
- Prüfen Sie die Verbindung zu `localhost:5432`.2. **Typfehler bei Parametern**:
- Vergewissern Sie sich, dass die Typen der Rust-Parameter mit den Datenbankspalten übereinstimmen (z. B. `i32` für `INTEGER`).3. **Keine Berechtigungen**:
- Prüfen Sie Benutzername und Passwort in `docker-compose.yml` und im Rust-Code.---
## Nächste Schritte
- Erweiterung des Codes, um mehrere Tabellen und komplexere Queries zu handhaben.
- Einsatz von Migrations-Tools wie `diesel` oder `sqlx` für Schemaänderungen.
- Automatische Tests mit einer isolierten Testdatenbank.