PGlite – eingebettetes Postgres
(pglite.dev)- PGlite ist eine schlanke Lösung, mit der sich eine vollständige Postgres-Datenbank lokal in einer WASM-Umgebung ausführen lässt
- Mit weniger als 3 MB im komprimierten Zustand lässt sie sich auch in Browsern oder Client-Umgebungen einfach betreiben
- Datenladen, Synchronisierung und Echtzeitabfragen sind integriert und ermöglichen reaktive Datenverarbeitung
- Unterstützt dynamisches Laden von Erweiterungen einschließlich pgvector, sodass sich verschiedene Erweiterungsmodule nutzen lassen
- Über database.build auf Basis von Supabase lassen sich mit KI Postgres-Datenbanken erzeugen und bereitstellen, was die Flexibilität webbasierter Datenbankentwicklung erhöht
Überblick
- PGlite ist eine eingebettete Postgres-Datenbank, die in einer WASM-(WebAssembly-)Umgebung läuft
- Eine vollständige Postgres-Instanz kann lokal ausgeführt werden
- Unterstützt reaktive Datenverarbeitung und Echtzeit-Synchronisierung
Hauptmerkmale
- Leichtgewichtigkeit: Bietet einen vollständigen Postgres-Build mit weniger als 3 MB im Gzip-komprimierten Zustand
- Kann auch in Browsern oder schlanken Client-Umgebungen ausgeführt werden
- Erweiterbarkeit: Über einen Mechanismus zum dynamischen Laden von Erweiterungen lassen sich verschiedene Postgres-Erweiterungen hinzufügen
- Die Erweiterung pgvector wird standardmäßig unterstützt
- Reaktivität: Enthält integrierte Funktionen für Datenladen, Synchronisierung und Echtzeitabfragen
- Geeignet für Echtzeit-Datenupdates und den Bau reaktiver Anwendungen
Ausprobieren und Einsatz
- Auf der Plattform database.build können Postgres-Datenbanken auf Basis von PGlite erstellt und veröffentlicht werden
- Ein KI-gestütztes Tool von Supabase, mit dem Nutzer ihre Datenbanken direkt selbst erstellen können
- Eine PGlite-Postgres-Instanz kann direkt im Browser ausgeführt werden
- Einschließlich pgvector
- Zusätzliche Erweiterungen lassen sich in einer playground(REPL)-Umgebung ausprobieren
Bedeutung
- PGlite erweitert die Funktionen von Postgres bis in den Browser und ermöglicht damit clientseitig ausgerichtete Datenbankausführung
- Durch die Kombination aus Leichtgewichtigkeit, Erweiterbarkeit und Reaktivität gilt es als vielversprechende Datenbanklösung für die Entwicklung von Webanwendungen der nächsten Generation
2 Kommentare
Ich habe diesen Artikel gesehen und testweise PGlite in mein Projekt eingeführt. Für einfache Tests ist es wirklich schnell und gut. Ich bin gespannt, was noch kommt.
Hacker-News-Kommentare
Ich arbeite im PGlite-Team. Freut mich, es wieder auf HN zu sehen
Die wöchentlichen Downloads haben kürzlich 3 Millionen überschritten und werden bald 4 Millionen erreichen — siehe die npm-Paketseite
Ursprünglich wurde es gebaut, um in Web-Apps eingebettet zu werden, aber inzwischen wächst die Nutzung in Entwickler-Tools und CLI-Umgebungen explosionsartig. Google Firebase und Prisma betten PGlite jeweils auch in ihre CLIs ein, um Serverprodukte zu emulieren
Also das Lesen von Blöcken per Range Request von einer entfernten URL wie bei DuckDB oder sql.js-httpvfs
Auch unser Labor arbeitet an so einem Projekt, aber das http-vfs-Ökosystem ist noch auf Prototyp-Niveau, daher gibt es kaum optimierte Bibliotheken
Mich würde auch interessieren, ob das Festplattenzugriffsmuster von PostgreSQL besser zu http-vfs passt als das von SQLite
Falls ja, wäre es wirklich großartig, wenn es das Netzwerkprotokoll unterstützen würde, damit man es auch in CI-Umgebungen anderer Sprachen als JS nutzen kann
Ich frage mich, ob das Ziel darin besteht, SQLite oder DuckDB zu ersetzen
Ich würde PGlite gern in einer nicht JavaScript-basierten Laufzeitumgebung verwenden
Zum Beispiel eingebettet in ein Go-CLI mit einer WASM-Laufzeit als Ersatz für SQLite
In Issue #89 sieht es so aus, als gäbe es Third-Party-Bindings für Rust. Ich frage mich, ob ihr offiziell plant, Bindings für andere Sprachen zu unterstützen
PGlite ist wirklich hervorragend. Ich nutze es für die Entwicklung als PostgreSQL-Server im Browser
Der Server implementiert das PG-Protokoll, und wenn sich ein Client verbindet, werden die Queries an den Browser weitergeleitet, wo PGlite intern läuft
Das Ergebnis ist ein vollwertiger PG-Server im Browser — dbfor.dev
Dieses Projekt ist sehr interessant. Einer der Nachteile von Postgres ist, dass man immer einen Server einrichten muss, und das löst genau dieses Problem
Ich frage mich, ob es eine Möglichkeit gibt, es als native Bibliothek zu kompilieren. Ein Teil des Codes scheint wiederverwendbar zu sein
Ich frage mich, was der Unterschied zwischen PGlite und SQLite ist
Ich habe SQLite hauptsächlich in eingebetteten Umgebungen und auf der Browser-Client-Seite verwendet
Der Vorteil von SQLite ist seine Einfachheit, aber die vielen Erweiterungen von PGlite sind spannend. Ich würde gern wissen, was die grundlegenden Unterschiede zwischen den beiden Datenbanken sind
Mit SQLite kann man Tests schnell ausführen, aber wenn die tatsächliche Infrastruktur PostgreSQL ist, ist der Nutzen begrenzt
Für Unit-Tests nutze ich immer noch TestContainers, um ein Docker-basiertes Postgres laufen zu lassen
Aber dank solcher Alternativen sind auch Python-Test-Tools wie py-pglite möglich geworden
Trotzdem habe ich mehr Vertrauen in Ansätze wie pgserver, bei denen man echtes Postgres leichtgewichtig als pip-Paket starten kann
Meine Meinung bezieht sich nur auf die Perspektive von Unit-Tests
Unser Team hat beim Aufbau eines neuen internen Dienstes PGlite in die Testumgebung eingeführt
Wir haben einen Wrapper so aufgebaut, dass bei Tests PGlite und im echten Betrieb eine Postgres-Instanz verwendet wird, und das war sehr erfolgreich
Besonders mit der
.clone()-Funktion kann man DB-Checkpoints erstellen und für jeden Test auf den Anfangszustand zurücksetzenEs ist auch sehr einfach geworden, 50 Test-Suites parallel laufen zu lassen
Ich nutze es für Tests, und es fühlt sich an wie ein Mittelweg zwischen In-Memory-SQLite und einer vollständigen Postgres-Instanz
Ich habe lange nach so etwas gesucht, und ich bin zufrieden, weil die Tests schneller geworden sind. Bisher gab es auch kaum Einschränkungen
Es gibt auch Doltgres, ein Postgres in Form einer einzelnen ausführbaren Datei
Man lädt einfach eine einzelne
.exe-Datei wie bei Deno herunter und startet sie, dann läuft Postgres sofort — Doltgres-Installationsdokumentation