{"id":22517569,"url":"https://github.com/felixwieland/dhbw-ti23-rust-postgres","last_synced_at":"2026-05-06T07:32:58.743Z","repository":{"id":264594675,"uuid":"892582423","full_name":"FelixWieland/dhbw-ti23-rust-postgres","owner":"FelixWieland","description":"DHBW Datenbankenvorlesung Rust und Postgres","archived":false,"fork":false,"pushed_at":"2024-11-25T08:00:35.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-02T03:44:37.903Z","etag":null,"topics":["example","postgres","rust","tokio","tokio-postgres"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FelixWieland.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-22T11:43:05.000Z","updated_at":"2024-11-25T08:30:56.000Z","dependencies_parsed_at":"2024-11-25T09:18:54.357Z","dependency_job_id":"36c41b28-60cb-4196-aeb2-f838479d69db","html_url":"https://github.com/FelixWieland/dhbw-ti23-rust-postgres","commit_stats":null,"previous_names":["felixwieland/dhbw-ti23-rust-postgres"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelixWieland%2Fdhbw-ti23-rust-postgres","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelixWieland%2Fdhbw-ti23-rust-postgres/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelixWieland%2Fdhbw-ti23-rust-postgres/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelixWieland%2Fdhbw-ti23-rust-postgres/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FelixWieland","download_url":"https://codeload.github.com/FelixWieland/dhbw-ti23-rust-postgres/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245957061,"owners_count":20700203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["example","postgres","rust","tokio","tokio-postgres"],"created_at":"2024-12-07T04:09:49.104Z","updated_at":"2026-05-06T07:32:58.696Z","avatar_url":"https://github.com/FelixWieland.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PostgreSQL mit `tokio-postgres` in Rust\n\nDieses 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.\n\n## Voraussetzungen\n\n### 1. Installierte Software\nUm dieses Projekt auszuführen, benötigen Sie:\n- **Rust**: Installieren Sie die neueste Version von Rust mit [rustup](https://rustup.rs/).\n- **Docker**: Installieren Sie Docker und Docker Compose, um die PostgreSQL-Datenbank aufzusetzen.\n\n## Projektstruktur\n\n### Dateien\n- `src/main.rs`: Der Rust-Code mit der Verbindung zur PostgreSQL-Datenbank und einem Beispiel für Transaktionen.\n- `Cargo.toml`: Die Projektabhängigkeiten.\n\n---\n\n## Installation\n\n### 1. Rust-Projekt einrichten\nKlonen Sie dieses Repository und wechseln Sie in das Verzeichnis:\n```bash\ngit clone https://github.com/FelixWieland/dhbw-ti23-rust-postgres\ncd dhbw-ti23-rust-postgres\n```\n\nInstallieren Sie die Abhängigkeiten:\n```bash\ncargo build\n```\n\nPassen Sie `user`, `password` und `dbname` entsprechend an, wenn Sie andere Werte in `docker-compose.yml` verwendet haben.\n\n---\n\n## Beispiel ausführen\n\n1. Starten Sie die PostgreSQL-Datenbank mit Docker Compose (falls noch nicht geschehen):\n   ```bash\n   docker-compose up -d\n   ```\n\n2. Führen Sie das Programm aus:\n   ```bash\n   cargo run\n   ```\n\nWenn alles korrekt eingerichtet ist, sollten Sie in der Konsole eine Bestätigung über den erfolgreichen Datenbankeintrag sehen:\n```\nTabelle 'users' erstellt.\nTransaktion gestartet.\nDaten eingefügt: Name = Bob, Alter = 25.\nDaten aktualisiert: Name = Bob, Alter = 30.\nAbgefragte Daten - ID: 2, Name: Bob, Alter: 30\nDaten gelöscht: Name = Bob.\nTransaktion erfolgreich festgeschrieben.\n```\n\n---\n\n## Erklärung des Codes\n\n### 1. Datenbankverbindung\nDie Verbindung zur Datenbank wird mit `tokio-postgres` hergestellt:\n```rust\nlet (client, connection) = tokio_postgres::connect(\n    \"host=localhost user=postgres password=postgres dbname=postgres\",\n    NoTls,\n)\n.await?;\n```\n\n- `host`: Die IP oder der Hostname der Datenbank (`localhost` für Docker Compose).\n- `user`: Der Benutzername (`postgres`).\n- `password`: Das Passwort (`postgres`).\n- `dbname`: Der Name der Datenbank (`postgres`).\n\nDie Verbindung läuft in einem separaten Task, um die Asynchronität zu gewährleisten.\n\n### 2. Transaktion\nDaten werden in einer Transaktion eingefügt:\n```rust\nlet transaction = client.transaction().await?;\ntransaction\n    .execute(\n        \"INSERT INTO users (name, age) VALUES ($1, $2)\",\n        \u0026[\u0026\"Bob\", \u002625],\n    )\n    .await?;\ntransaction.commit().await?;\n```\n\n- `$1` und `$2` sind Platzhalter für Parameter.\n- Die Parameter werden als Referenzen übergeben, z. B. `\u0026\"Bob\"` und `\u002625`.\n\n### 3. Abfragen und Verarbeitung\nEin Beispiel für eine Abfrage und den Abruf von Daten:\n```rust\nlet row = client\n    .query_one(\"SELECT name FROM users WHERE id = $1\", \u0026[\u00261])\n    .await?;\nlet name: String = row.get(0);\nprintln!(\"User name: {}\", name);\n```\n\n---\n\n## Nützliche Befehle\n\n### Docker\n- **Container stoppen**:\n  ```bash\n  docker-compose down\n  ```\n\n- **Logs anzeigen**:\n  ```bash\n  docker-compose logs\n  ```\n\n### PostgreSQL-Datenbank\nUm sich mit der Datenbank zu verbinden:\n```bash\ndocker exec -it rust_postgres_example_db psql -U postgres -d postgres\n```\n\n---\n\n## Fehlerbehebung\n\n1. **Verbindungsfehler**:\n   - Stellen Sie sicher, dass der Docker-Container läuft:\n     ```bash\n     docker ps\n     ```\n   - Prüfen Sie die Verbindung zu `localhost:5432`.\n\n2. **Typfehler bei Parametern**:\n   - Vergewissern Sie sich, dass die Typen der Rust-Parameter mit den Datenbankspalten übereinstimmen (z. B. `i32` für `INTEGER`).\n\n3. **Keine Berechtigungen**:\n   - Prüfen Sie Benutzername und Passwort in `docker-compose.yml` und im Rust-Code.\n\n---\n\n## Nächste Schritte\n\n- Erweiterung des Codes, um mehrere Tabellen und komplexere Queries zu handhaben.\n- Einsatz von Migrations-Tools wie `diesel` oder `sqlx` für Schemaänderungen.\n- Automatische Tests mit einer isolierten Testdatenbank.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelixwieland%2Fdhbw-ti23-rust-postgres","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelixwieland%2Fdhbw-ti23-rust-postgres","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelixwieland%2Fdhbw-ti23-rust-postgres/lists"}