>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Rust

Pourquoi réécrire Postgres en Rust

Imaginez que vous décidiez de reconstruire le moteur d'une voiture de collection, mais qu'au lieu des pièces d'origine, vous utilisez des pièces imprimées en 3D en titane. C'est grossièrement ce que fait le projet pgrust. Des développeurs ont pris Postgres 18.3 et ont commencé à réécrire méthodiquement ses internals en Rust.

Cela ressemble à de la folie ou à une expérience d'étudiant, mais les chiffres racontent une autre histoire. Le projet passe déjà plus de 46 000 tests de régression de Postgres. Ce n'est pas juste une « base de données inspirée de », mais une tentative de créer un remplacement binaire-compatible qui comprend les mêmes fichiers de données et les mêmes requêtes.

Qu'est-ce que ce projet

pgrust est une refonte complète du cœur de PostgreSQL. L'idée principale de son auteur, malisper, est que le code C original de Postgres est devenu trop complexe au fil des décennies pour des changements radicaux. Implémenter le multi-threading ou de nouveaux mécanismes de stockage là-bas est une tâche qui prendrait des années de discussions sur les listes de diffusion.

Rust sert ici non seulement de « langage sûr », mais comme un outil pour une itération rapide. Les développeurs utilisent des assistants IA pour accélérer le portage, mais ils contrôlent strictement les résultats grâce aux tests de référence de Postgres. Si la base de données originale génère une erreur sur une requête SQL malformée, pgrust doit générer exactement la même erreur.

En quoi pgrust diffère de l'original

La partie la plus intéressante réside dans les plans et les prototypes déjà implémentés. Le README mentionne une nouvelle version qui n'a pas encore été rendue publique, mais les résultats sont intrigants.

Au lieu du modèle classique « un processus par connexion », qui nous force à utiliser pgbouncer ou d'autres proxies, pgrust passe aux threads. Cela donne immédiatement un énorme boost sur les workloads transactionnels. Selon les mesures des auteurs, cette architecture fonctionne 50% plus vite que l'original.

Pour l'analytique, les chiffres sont encore plus impressionnants : une accélération de 300x est revendiquée. Les développeurs ciblent les performances de niveau Clickhouse tout en restant dans l'interface familière de Postgres.

Détails techniques et compatibilité

Le projet maintient la compatibilité disque. Vous pouvez prendre un répertoire de données existant de Postgres 18.3 et « pointer » pgrust dessus. Il récupérera les fichiers et commencera à fonctionner.

Pour compiler depuis les sources, vous aurez besoin de l'ensemble standard pour travailler avec Postgres : icu4c, openssl et libpq. Le processus est familier pour les développeurs Rust :

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

Un détail intéressant : au lancement, vous devez augmenter manuellement les limites de pile (ulimit -s 65520), car certaines opérations Postgres sont très gourmandes en mémoire sur la pile, et le runtime Rust se comporte plus modestement par défaut.

Quoi de prévu ensuite sur la roadmap

La roadmap du projet ressemble à la liste de souhaits de tout administrateur de base de données :

  • Pooling de connexions intégré (adieu, pgbouncer).
  • Expériences avec le stockage sans Vacuum. Si cela peut être implémenté, pgrust résoudra l'un des problèmes les plus « douloureux » de Postgres.
  • Gardes-fous pour les mauvaises requêtes. C'est particulièrement pertinent aujourd'hui, quand les réseaux de neurones génèrent souvent du SQL sans se soucier beaucoup des index et des plans d'exécution.
  • Branching de données rapide.

Cela vaut-il la peine d'essayer

En ce moment, pgrust n'est pas prêt pour la production. Les auteurs eux-mêmes l'admettent honnêtement. Les extensions comme PL/Python ou PL/Tcl ne sont pas encore supportées, et les performances dans la branche publique n'ont pas encore été entièrement optimisées.

Cependant, c'est un bac à sable idéal pour les expériences. Si vous avez toujours voulu explorer les entrailles d'un SGBD mais que le massive code C vous rebutait, pgrust est votre chance. Le code Rust est un ordre de grandeur plus facile à lire et à modifier.

Vous pouvez essayer le projet via Docker avec une seule commande :

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

Cela lancera un conteneur avec pgrust et ouvrira le psql standard. Pour ceux qui ne veulent rien télécharger, il y a une démo sur le site officiel fonctionnant en WebAssembly, fonctionnant directement dans le navigateur.

Le projet ressemble à l'un des défis open source les plus ambitieux ces derniers temps. Même si pgrust ne remplace pas Postgres dans les prochaines années, il deviendra certainement un terrain d'essai pour des technologies qui pourraient ensuite migrer vers la branche principale « éléphant ».

Projets similaires