>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Rust

Perché riscrivere Postgres in Rust

Immaginate di decidere di ricostruire il motore di un'auto classica, ma invece dei pezzi originali usate componenti stampati in 3D in titanio. È più o meno quello che sta facendo il progetto pgrust. Gli sviluppatori hanno preso Postgres 18.3 e hanno iniziato a riscrivere sistematicamente i suoi interni in Rust.

Sembra follia o un esperimento studentesco, ma i numeri dicono il contrario. Il progetto supera già più di 46.000 test di regressione del Postgres originale. Non è solo un "database ispirato a", ma un tentativo di creare una sostituzione binariamente compatibile che comprende gli stessi file di dati e le stesse query.

Cos'è questo progetto

pgrust è un overhaul completo del core di PostgreSQL. L'idea principale del suo autore, malisper, è che il codice C originale di Postgres è diventato troppo complesso nel corso dei decenni per cambiamenti radicali. Implementare il multi-threading o nuovi meccanismi di storage lì è un compito che richiederebbe anni di discussioni sulle mailing list.

Rust qui serve non solo come "linguaggio sicuro", ma come strumento per iterazione rapida. Gli sviluppatori usano assistenti AI per velocizzare il porting, ma controllano rigorosamente i risultati attraverso i test di riferimento di Postgres. Se il database originale lancia un errore su una query SQL malformata, pgrust deve lanciare esattamente lo stesso errore.

In cosa pgrust differisce dall'originale

La parte più interessante sta nei piani e nei prototipi già implementati. Il README menziona una nuova versione che non è ancora stata rilasciata al pubblico, ma i risultati sono intriganti.

invece del classico modello "un processo per connessione", che ci costringe a usare pgbouncer o altri proxy, pgrust sta passando ai thread. Questo dà immediatamente un enorme boost sui carichi di lavoro transazionali. Secondo le misurazioni degli autori, questa architettura gira il 50% più veloce dell'originale.

Per le analisi, i numeri sono ancora più impressionanti: si parla di un speedup di 300x. Gli sviluppatori puntano a prestazioni a livello di Clickhouse rimanendo all'interno della familiare interfaccia di Postgres.

Dettagli tecnici e compatibilità

Il progetto mantiene la compatibilità su disco. Potete prendere una directory di dati esistente da Postgres 18.3 e "puntare" pgrust verso di essa. Raccoglierà i file e inizierà a funzionare.

Per compilare dal codice sorgente, vi servirà il set standard per lavorare con Postgres: icu4c, openssl e libpq. Il processo sarà familiare agli sviluppatori Rust:

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

Un dettaglio interessante: all'avvio, dovete aumentare manualmente i limiti dello stack (ulimit -s 65520), perché alcune operazioni di Postgres sono molto affamate di memoria sullo stack, e il runtime di Rust si comporta in modo più modesto di default.

Cosa c'è nel roadmap

Il roadmap del progetto sembra la lista dei desideri di ogni amministratore di database:

  • Connection pooling integrato (addio, pgbouncer).
  • Esperimenti con storage senza Vacuum. Se questo può essere implementato, pgrust risolverà uno dei problemi più "dolorosi" di Postgres.
  • Protezioni per query problematiche. Questo è particolarmente rilevante ora, quando le reti neurali spesso generano SQL senza troppa considerazione per gli indici e i piani di esecuzione.
  • Ramificazione rapida dei dati.

Vale la pena provarlo

Al momento, pgrust non è pronto per la produzione. Gli stessi autori lo ammettono onestamente. Estensioni come PL/Python o PL/Tcl non sono ancora supportate, e le prestazioni nel branch pubblico non sono ancora state pienamente ottimizzate.

Tuttavia, questo è un playground ideale per esperimenti. Se avete sempre voluto approfondire le viscere di un DBMS ma vi spaventava l'imponente codebase C, pgrust è la vostra occasione. Il codice Rust è ordini di grandezza più facile da leggere e modificare.

Potete provare il progetto via Docker con un singolo comando:

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

Questo avvierà un container con pgrust e aprirà il standard psql al suo interno. Per chi non vuole scaricare nulla, c'è una demo sul sito ufficiale che gira in WebAssembly, funzionando direttamente nel browser.

Il progetto sembra una delle sfide open source più ambiziose degli ultimi tempi. Anche se pgrust non sostituirà Postgres nei prossimi anni, diventerà sicuramente un terreno di prova per tecnologie che potrebbero poi migrare al branch principale "dell'elefante".

Progetti correlati