Warum Postgres in Rust neu schreiben
Stellen Sie sich vor, Sie beschließen, den Motor eines Oldtimers zu überholen, aber anstatt Originalteile verwenden Sie per 3D-Druck aus Titan gefertigte Teile. Ungefähr so verhält es sich mit dem pgrust-Projekt. Entwickler haben Postgres 18.3 genommen und begannen, dessen Interna systematisch in Rust neu zu schreiben.
Das klingt nach Wahnsinn oder einem Studentenexperiment, aber die Zahlen sprechen eine andere Sprache. Das Projekt besteht bereits mehr als 46.000 Regressionstests des originalen Postgres. Dies ist nicht nur eine „Datenbank inspiriert von", sondern ein Versuch, einen binärkompatiblen Ersatz zu schaffen, der dieselben Datendateien und dieselben Abfragen versteht.
Was ist dieses Projekt
pgrust ist eine vollständige Überarbeitung des PostgreSQL-Kerns. Die Hauptidee seines Autors, malisper, ist, dass der ursprüngliche Postgres-Code über Jahrzehnte zu komplex geworden ist, um radikale Änderungen vorzunehmen. Multi-Threading oder neue Speichermechanismen dort zu implementieren, wäre eine Aufgabe, die Jahre an Mailinglisten-Diskussionen erfordern würde.
Rust dient hier nicht nur als „sichere Sprache", sondern als Werkzeug für schnelle Iteration. Entwickler nutzen KI-Assistenten, um das Portieren zu beschleunigen, kontrollieren die Ergebnisse aber strikt durch die Referenztests von Postgres. Wenn die Originaldatenbank einen Fehler bei einer fehlerhaften SQL-Abfrage wirft, muss pgrust genau denselben Fehler werfen.
Wie unterscheidet sich pgrust vom Original
Das Interessanteste liegt in den Plänen und bereits implementierten Prototypen. Die README erwähnt eine neue Version, die noch nicht öffentlich veröffentlicht wurde, aber die Ergebnisse sind faszinierend.
Statt des klassischen „Prozess pro Verbindung"-Modells, das uns zur Nutzung von pgbouncer oder anderen Proxies zwingt, wechselt pgrust zu Threads. Das gibt sofort einen enormen Boost bei transaktionalen Workloads. Den Messungen der Autoren zufolge läuft diese Architektur 50% schneller als das Original.
Für Analytics sind die Zahlen noch wilder: Eine 300-fache Beschleunigung wird behauptet. Entwickler zielen auf Clickhouse-Level-Performance, während sie innerhalb der vertrauten Postgres-Schnittstelle bleiben.
Technische Details und Kompatibilität
Das Projekt wahrt die Plattenkompatibilität. Sie können ein vorhandenes Datenverzeichnis von Postgres 18.3 nehmen und pgrust darauf „zeigen". Es wird die Dateien aufnehmen und zu arbeiten beginnen.
Um aus dem Quellcode zu bauen, benötigen Sie den Standard-Satz für die Arbeit mit Postgres: icu4c, openssl und libpq. Der Prozess ist Rust-Entwicklern vertraut:
PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \
cargo build --release --locked --bin postgres
Ein interessantes Detail: Beim Start müssen Sie die Stack-Limits manuell erhöhen (ulimit -s 65520), weil einige Postgres-Operationen auf dem Stack sehr speicherhungrig sind und die Rust-Laufzeit standardmäßig bescheidener agiert.
Was als Nächstes auf der Roadmap steht
Die Roadmap des Projekts sieht aus wie die Wunschliste jedes Datenbankadministrators:
- Integriertes Connection Pooling (Tschüss, pgbouncer).
- Experimente mit Speicher ohne Vacuum. Wenn dies implementiert werden kann, wird pgrust eines der „schmerzhaftesten" Probleme von Postgres lösen.
- Guardrails für schlechte Abfragen. Dies ist besonders relevant, wenn neuronale Netze häufig SQL generieren, ohne sich viel um Indizes und Ausführungspläne zu kümmern.
- Schnelles Daten-Branching.
Lohnt es sich, es zu probieren
Im Moment ist pgrust nicht produktionsreif. Die Autoren geben dies selbst ehrlich zu. Erweiterungen wie PL/Python oder PL/Tcl werden noch nicht unterstützt, und die Performance im öffentlichen Branch wurde noch nicht vollständig optimiert.
Dies ist jedoch ein idealer Spielplatz für Experimente. Wenn Sie schon immer in die Eingeweide eines DBMS eintauchen wollten, sich aber vor der massiven C-Codebasis gescheut haben, ist pgrust Ihre Chance. Rust-Code ist um eine Größenordnung einfacher zu lesen und zu modifizieren.
Sie können das Projekt über Docker mit einem einzigen Befehl ausprobieren:
docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1
Dadurch wird ein Container mit pgrust gestartet und das Standard-psql darin geöffnet. Für diejenigen, die nichts herunterladen möchten, gibt es ein Demo auf der offiziellen Website, das in WebAssembly läuft und direkt im Browser funktioniert.
Das Projekt sieht nach einer der ambitioniertesten Open-Source-Herausforderungen der letzten Zeit aus. Auch wenn pgrust Postgres in den kommenden Jahren nicht ersetzen wird, wird es definitiv zu einem Testfeld für Technologien, die später möglicherweise in den Haupt-„Elefanten"-Zweig migrieren.
Ähnliche Projekte