>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Rust

Waarom Postgres in Rust Herschrijven

Stel je voor dat je besluit de motor van een klassieke auto te herbouwen, maar in plaats van originele onderdelen gebruik je onderdelen die met titanium zijn geprint via 3D. Dat is ongeveer wat het pgrust-project doet. Ontwikkelaars hebben Postgres 18.3 genomen en zijn de interne werking methodisch aan het herschrijven in Rust.

Het klinkt als waanzin of een studentenexperiment, maar de cijfers zeggen iets anders. Het project doorstaat al meer dan 46.000 regressietests van het originele Postgres. Dit is niet zomaar een "database geïnspireerd door", maar een poging om een binair-compatibele vervanging te creëren die dezelfde databestanden en dezelfde queries begrijpt.

Wat is dit project

pgrust is een complete overhaul van de PostgreSQL-kern. Het hoofdidee van de auteur, malisper, is dat de originele Postgres C-code door decennia heen te complex is geworden voor radicale veranderingen. Het implementeren van multi-threading of nieuwe opslagmechanismen daar is een taak die jaren van discussies op mailinglijsten zou kosten.

Rust dient hier niet alleen als een "veilige taal", maar als een tool voor snelle iteratie. Ontwikkelaars gebruiken AI-assistenten om het porten te versnellen, maar ze controleren de resultaten strikt via de referentietests van Postgres. Als de originele database een fout geeft op een verkeerd gevormde SQL-query, moet pgrust exact dezelfde fout geven.

Hoe pgrust verschilt van het origineel

Het meest interessante deel ligt in de plannen en reeds geïmplementeerde prototypes. De README vermeldt een nieuwe versie die nog niet publiek is uitgebracht, maar de resultaten zijn intrigerend.

In plaats van het klassieke "proces per verbinding"-model, dat ons dwingt om pgbouncer of andere proxies te gebruiken, schakelt pgrust over naar threads. Dit geeft onmiddellijk een enorme boost op transactionele workloads. Volgens de metingen van de auteurs draait deze architectuur 50% sneller dan het origineel.

Voor analytics zijn de cijfers nog vreemder: een 300x snelheidsverbetering wordt geclaimd. Ontwikkelaars mikken op Clickhouse-niveau prestaties terwijl ze binnen de vertrouwde Postgres-interface blijven.

Technische details en compatibiliteit

Het project behoudt schijfcompatibiliteit. Je kunt een bestaande datadirectory van Postgres 18.3 nemen en pgrust erop "richten". Het zal de bestanden oppikken en aan het werk gaan.

Om van broncode te bouwen, heb je de standaard set nodig voor het werken met Postgres: icu4c, openssl en libpq. Het proces zal bekend voorkomen voor Rust-ontwikkelaars:

PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \
cargo build --release --locked --bin postgres

Een interessant detail: bij het opstarten moet je handmatig de stacklimieten verhogen (ulimit -s 65520), omdat sommige Postgres-operaties zeer geheugenhongerig zijn op de stack, en de Rust-runtime standaard bescheidener is.

Wat is de volgende stap op de roadmap

De roadmap van het project ziet eruit als het wensenlijstje van elke databasebeheerder:

  • Ingebouwde connection pooling (vaarwel, pgbouncer).
  • Experimenten met opslag zonder Vacuum. Als dit geïmplementeerd kan worden, lost pgrust een van de meest "pijnlijke" problemen van Postgres op.
  • Guardrails voor slechte queries. Dit is vooral relevant nu, wanneer neurale netwerken vaak SQL genereren zonder veel zorg voor indexen en uitvoeringsplannen.
  • Snelle data-branching.

Is het de moeite waard om te proberen

Op dit moment is pgrust niet productierijp. De auteurs geven dit zelf eerlijk toe. Extensies zoals PL/Python of PL/Tcl worden nog niet ondersteund, en de prestaties in de publieke branch zijn nog niet volledig geoptimaliseerd.

Dit is echter een ideale speeltuin voor experimenten. Als je altijd al in de ingewanden van een DBMS hebt willen graven, maar werd afgeschrikt door de massive C-codebasis, is pgrust je kans. Rust-code is een orde van grootte gemakkelijker te lezen en aan te passen.

Je kunt het project uitproberen via Docker met een enkele opdracht:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1

Dit start een container met pgrust en opent de standaard psql erin. Voor degenen die niets willen downloaden, is er een demo op de officiële website die draait in WebAssembly, en werkt rechtstreeks in de browser.

Het project lijkt op een van de meest ambitieuze open source-uitdagingen van de laatste tijd. Zelfs als pgrust Postgres de komende jaren niet vervangt, zal het zeker een testomgeving worden voor technologieën die later misschien naar de hoofd-"olifant"-branch migreren.

Gerelateerde projecten