第240819期 - pglite
7k star,一个好玩的开源软件PGlite: 轻量级的Postgres WASM构建
工具简介
PGlite是由ElectricSQL开发的轻量级Postgres构建,打包为WebAssembly(WASM)并集成到TypeScript客户端库中。它允许在浏览器、Node.js、Bun和Deno环境中运行Postgres,而无需安装任何其他依赖项。PGlite的压缩包仅有3MB,并支持多种Postgres扩展,包括pgvector¹。
如何快速开始
浏览器环境
-
安装和导入: 你可以使用常用的包管理器安装PGlite,或者通过CDN引入:
import { PGlite } from "@electric-sql/pglite"; // 或者使用CDN import { PGlite } from "https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js";
-
创建数据库实例: 创建一个内存中的Postgres实例:
const db = new PGlite(); await db.query("select 'Hello world' as message;"); // 返回结果: { rows: [ { message: "Hello world" } ] }
-
持久化数据库: 如果需要将数据库持久化到indexedDB:
const db = new PGlite("idb://my-pgdata");
Node.js和Bun环境
-
安装: 使用npm安装PGlite:
npm install @electric-sql/pglite
-
导入和使用:
import { PGlite } from "@electric-sql/pglite"; const db = new PGlite(); await db.query("select 'Hello world' as message;"); // 返回结果: { rows: [ { message: "Hello world" } ] }
-
持久化到文件系统:
const db = new PGlite("./path/to/pgdata");
工具特点
-
轻量级: PGlite的压缩包仅有3MB,适合在资源受限的环境中使用¹。
-
多环境支持: PGlite可以在浏览器、Node.js、Bun和Deno中运行,提供了极大的灵活性¹。
-
无需额外依赖: PGlite无需安装任何其他依赖项,即可在多种环境中运行Postgres¹。
-
支持Postgres扩展: PGlite支持多种Postgres扩展,包括pgvector,这使得它在处理复杂数据类型时非常强大¹。
-
持久化选项: PGlite不仅可以作为一个临时的内存数据库使用,还可以将数据持久化到文件系统(Node.js/Bun)或indexedDB(浏览器)中¹。
-
单进程模式: 由于WASM的限制,PGlite采用单进程模式运行,这与传统的Postgres多进程模型不同¹。这种模式主要用于命令行操作和恢复过程¹。
-
高效的查询处理: PGlite能够高效地处理SQL查询,提供了与传统Postgres相似的性能和功能¹。
结论
PGlite作为一个轻量级的Postgres WASM构建,提供了在多种环境中运行Postgres的能力,且无需额外依赖。它的轻量级特性、多环境支持和持久化选项使其成为开发者在构建实时、反应式和本地优先应用时的理想选择。
¹: GitHub - electric-sql/pglite