PGlite – Postgres embarqué
(pglite.dev)- PGlite est une solution légère qui permet d’exécuter localement une base de données Postgres complète dans un environnement WASM
- Avec une taille inférieure à 3 Mo une fois compressée, elle peut être lancée facilement dans un navigateur ou un environnement client
- Des fonctions intégrées de chargement des données, synchronisation et requêtes en temps réel permettent un traitement réactif des données
- La solution prend en charge le chargement dynamique d’extensions, y compris pgvector, pour exploiter divers modules d’extension
- Via database.build, basé sur Supabase, il est possible de créer et déployer des bases de données Postgres avec l’IA, ce qui accroît la flexibilité du développement de bases de données sur le web
Aperçu
- PGlite est une base de données Postgres embarquée qui s’exécute dans un environnement WASM (WebAssembly)
- Il est possible d’exécuter une instance Postgres complète en local
- La solution prend en charge le traitement réactif des données et la synchronisation en temps réel
Principales caractéristiques
- Légèreté : fournit un build Postgres complet de moins de 3 Mo une fois compressé avec Gzip
- Peut fonctionner dans un navigateur ou un environnement client léger
- Extensibilité : le mécanisme de chargement dynamique d’extensions permet d’ajouter diverses fonctionnalités d’extension Postgres
- L’extension pgvector est prise en charge nativement
- Réactivité : inclut des fonctions intégrées pour le chargement des données, la synchronisation et les requêtes en temps réel
- Adapté aux mises à jour de données en temps réel et à la création d’applications réactives
Prise en main et usages
- La plateforme database.build permet de créer et publier des bases de données Postgres basées sur PGlite
- Il s’agit d’un outil alimenté par l’IA et développé par Supabase, qui permet aux utilisateurs de créer eux-mêmes leur base de données
- Il est possible d’exécuter directement une instance Postgres PGlite dans le navigateur
- Avec pgvector inclus
- Des extensions supplémentaires peuvent être testées dans l’environnement playground(REPL)
Portée
- PGlite étend les capacités de Postgres jusqu’au navigateur, rendant possible l’exécution de bases de données centrée sur le client
- En combinant légèreté, extensibilité et réactivité, la solution attire l’attention comme base de données adaptée au développement des applications web de nouvelle génération
2 commentaires
Après avoir lu cet article, j’ai essayé d’intégrer PGlite de manière expérimentale dans mon projet. Clairement, pour des tests simples, c’était vraiment rapide et très pratique. J’en attends beaucoup pour la suite.
Avis Hacker News
Je travaille dans l’équipe PGlite. Ravi de le voir présenté à nouveau sur HN
Le nombre de téléchargements hebdomadaires a récemment dépassé les 3 millions et devrait bientôt atteindre les 4 millions — voir la page du package npm
À l’origine, il a été conçu pour être embarqué dans des web apps, mais aujourd’hui son usage explose surtout dans les outils de développement et les environnements CLI. Google Firebase et Prisma intègrent aussi PGlite dans leurs CLI respectives pour émuler leurs produits serveur
Je parle d’une lecture de blocs via des range requests depuis une URL distante, comme avec DuckDB ou sql.js-httpvfs
Notre labo travaille aussi sur un projet de ce type, mais l’écosystème http-vfs en est encore au stade du prototype, donc il existe très peu de bibliothèques bien optimisées
Je me demande aussi si les schémas d’accès disque de PostgreSQL sont plus adaptés à http-vfs que ceux de SQLite
Si c’est le cas, ce serait vraiment génial s’il prenait en charge le protocole réseau pour pouvoir être utilisé aussi dans des environnements CI d’autres langages que JS
Je me demande si l’objectif est d’en faire une alternative à SQLite ou à DuckDB
J’aimerais utiliser PGlite dans un runtime non JavaScript
Par exemple l’embarquer dans une CLI Go via un runtime WASM pour l’utiliser comme remplaçant de SQLite
En regardant l’issue #89, on dirait qu’il existe des bindings tiers pour Rust, mais je me demande s’il est prévu de prendre officiellement en charge des bindings pour d’autres langages
PGlite est vraiment formidable. Je l’utilise en développement comme serveur PostgreSQL dans le navigateur
Le serveur implémente le protocole PG, et lorsqu’un client se connecte, les requêtes sont transmises au navigateur où PGlite s’exécute en interne
Au final, on obtient un serveur PG complet dans le navigateur — dbfor.dev
Ce projet est très intéressant. L’un des défauts de Postgres, c’est qu’il faut toujours mettre en place un serveur, et ça résout ce problème
Je me demande s’il existe un moyen de le compiler en bibliothèque native. Une partie du code semble réutilisable
Je me demande quelles sont les différences entre PGlite et SQLite
Jusqu’ici, j’ai surtout utilisé SQLite dans des environnements embarqués et côté client dans le navigateur
L’avantage de SQLite, c’est sa simplicité, mais les nombreuses extensions de PGlite sont intéressantes. J’aimerais savoir quelles sont les différences fondamentales entre les deux bases de données
On peut lancer des tests rapidement avec SQLite, mais si l’infrastructure réelle repose sur PostgreSQL, la valeur reste limitée
Pour les tests unitaires, j’utilise toujours TestContainers pour faire tourner un Postgres basé sur Docker
Mais grâce à ce type d’alternative, des outils de test Python comme py-pglite sont devenus possibles
Malgré tout, j’ai davantage confiance dans une approche comme pgserver, qui permet de faire tourner un vrai Postgres léger sous forme de package pip
Mon avis se limite au point de vue des tests unitaires
Notre équipe a adopté PGlite dans l’environnement de test en créant un nouveau service interne
Nous avons mis en place un wrapper pour utiliser PGlite pendant les tests et une instance Postgres en exécution réelle, et cela a très bien fonctionné
En particulier, la fonction
.clone()permet de créer des checkpoints de base de données afin de revenir à l’état initial pour chaque testIl est aussi devenu très simple d’exécuter 50 suites de tests en parallèle
Je l’utilise pour les tests, et ça donne l’impression d’un entre-deux entre SQLite en mémoire et une instance Postgres complète
Je cherchais quelque chose comme ça depuis longtemps, et je suis satisfait de la vitesse des tests. Jusqu’ici, il y a eu très peu de limitations
Il existe aussi Doltgres, un Postgres sous forme d’exécutable unique
Comme Deno, il suffit de télécharger un seul fichier
.exeet de l’exécuter pour avoir immédiatement un Postgres fonctionnel — documentation d’installation de Doltgres