PGlite:在浏览器中运行PostgreSQL的Wasm构建
最近发布的PGlite是一个将PostgreSQL打包成TypeScript客户端库的Wasm构建,开发者可以在浏览器中无需额外依赖地运行PostgreSQL查询。PGlite主要用于响应式、实时、本地优先(local-first)的应用程序。
背景与挑战
此前,开发者已经可以通过WebAssembly在浏览器中运行SQLite。然而,要在浏览器中运行PostgreSQL,通常需要启动一个虚拟机,并且无法持久化数据。PGlite的出现解决了这些问题,使得开发者能够在JavaScript环境中运行PostgreSQL查询,并将数据持久化到文件系统(Node/Bun)或indexedDB(浏览器)中。
本地优先应用的支持
PGlite的创建旨在支持响应式、实时、本地优先的应用场景。ElectricSQL,一个自称为本地优先软件平台的团队,使用PGlite与服务器按需同步数据。本地优先的开发模式中,应用程序代码直接与嵌入式本地数据库通信,数据通过主动-主动数据库复制在后台同步。
功能与特性
PGlite支持参数化SQL查询、交互式事务API、pl/pgsql支持、Web Worker执行等功能。其压缩后的大小为2.6MB。开发者可以在浏览器中以内存模式使用PGlite,也可以将数据库持久化到indexedDB中。
使用示例
在内存中运行查询的示例:
const db = new PGlite()
await db.query("select 'Hello world' as message;")
// -> { rows: [ { message: "Hello world" } ] }将数据库持久化到indexedDB的示例:
const db = new PGlite("idb://my-pgdata");应用场景
除了本地优先应用,PGlite还被强调用于代码测试。开发者可以使用PGlite在测试中替代SQLite,避免SQLite与PostgreSQL在默认值、JSON处理等方面的差异,而无需运行完整的Docker实例。
开发者反馈
有开发者指出,虽然云端的PostgreSQL用户不会将其作为替代方案,但PGlite在以下场景中非常有用:
- 希望应用程序是本地优先的(快速响应、良好的离线支持等),但同时需要与服务器同步数据。
- 需要一个强大的浏览器内数据存储,虽然SQLite via Wasm已经满足这一需求,但PGlite提供了更多选择。
开源与未来计划
PGlite是开源软件,采用Apache 2.0许可证,由ElectricSQL与Neon合作开发。目前PGlite仍处于早期阶段,未来计划支持pgvector。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。