https://github.com/glommer/pgmicro
pgmicro 产品解读
这个产品的野心比"让SQLite支持PG wire protocol"更深一层,值得拆解。
大多数"SQLite + PostgreSQL兼容"方案的思路是:
PG SQL → 转译 → SQLite SQL → SQLite引擎
pgmicro的路径完全不同:
PG SQL → libpg_query(真正的PG解析器)→ PG AST
→ Translator → Turso AST
→ Turso编译器 → VDBE字节码
→ SQLite存储引擎
关键在于绕过了SQLite的SQL层,直接编译到字节码。这意味着它不受SQLite SQL方言限制,SERIAL、:: cast、
、PostgreSQL JSON操作符这些东西可以原生支持,而不是靠字符串替换hack出来的。
类型系统的例子很说明问题——他们没有把PG类型"翻译"成SQLite类型,而是给Turso本身加了自定义类型支持,然后在上面实现PG类型。这是往下建基础,而不是往上打补丁。
README里有一句话定义了目标场景:
ephemeral, low-touch, short-lived, and small — a scratch database for a task, a session store that lives for minutes, a per-user sandbox.
这不是要替代生产PostgreSQL,而是针对一个新兴的需求形态:
场景 | 传统方案的痛点 |
|---|---|
AI agent的临时工作库 | 起一个PG容器太重 |
每个用户一个数据库 | 连接数/资源开销爆炸 |
边缘/嵌入式环境 | PG根本跑不起来 |
测试/沙箱 | 需要隔离但不想管理进程 |
SQLite解决了"轻量"问题,但开发者写的是PostgreSQL——无论是因为熟悉度、类型系统还是JSON能力。pgmicro想消除这个摩擦。
你提到的三种模式其实覆盖了完整的使用谱系:
服务端模式目前作者自己说"very simple",它更多是验证兼容性的测试工具,而不是主打功能——作者本人预期主要价值在内存和文件模式。
作者是Turso的创始人,pgmicro是Turso的fork。这个身份很微妙——他既能深度修改Turso核心,又在README里明确要求最小化对Turso core的改动,让改动upstream化。
这实际上是一种开源战略:pgmicro验证需求,成熟的功能推回Turso主线,两个项目互相喂养。
v0.6.0-pre.7,作者自己说"no guarantees"总结:这个产品的核心赌注是 —— AI时代会产生海量小型、短命、嵌入式数据库的需求,而这些场景的开发者想用PostgreSQL语法。如果这个判断是对的,pgmicro 卡住了一个很好的位置。