SuperAPI AI 工具集

pgmicro-postgres-sqlite

数据与分析

查看项目

更新于 10-14 05:34

技能介绍

pgmicro 是一个进程内运行的 PostgreSQL 重新实现,底层由兼容 SQLite 的存储引擎支撑。它使用真正的 PostgreSQL 解析器(libpg_query)解析 PostgreSQL SQL,并直接将其编译为 SQLite VDBE 字节码,由 Turso 执行。最终得到一个快速、可嵌入、单文件(或内存中)且支持 PostgreSQL 语法的数据库,无需服务器进程。

用途 pgmicro 面向需要在应用进程内直接使用 PostgreSQL 语法的场景。它把 PostgreSQL 的解析能力与 SQLite 兼容的存储、可嵌入的运行时结合起来,适合作为嵌入式数据库或轻量级数据库使用。

主要能力

  • 完整 PostgreSQL SQL 语法(通过实际的 PG 解析器)
  • 兼容 SQLite 的 .db 文件格式(可被任何 SQLite 工具读取)
  • JavaScript/TypeScript SDK(基于 WASM,可在 Node.js 和浏览器中运行)
  • PostgreSQL 线协议服务器模式(可用 psql、ORM 等连接)
  • 方言切换:以 PG 或 SQLite 语法访问同一数据库
  • PostgreSQL 系统目录虚拟表(pg_class、pg_attribute、pg_type 等)

安装 CLI(Node.js):

免安装运行

npx pg-micro

全局安装

npm install -g pg-micro pg-micro myapp.db

JavaScript/TypeScript SDK: npm install pg-micro

从源码(Rust): git clone https://github.com/glommer/pgmicro cd pgmicro cargo build --release ./target/release/pgmicro

使用方式 CLI 用法:

内存数据库(临时)

pgmicro

基于文件的数据库

pgmicro myapp.db

PostgreSQL 线协议服务器

pgmicro myapp.db --server 127.0.0.1:5432

内存服务器(适合测试)

pgmicro :memory: --server 127.0.0.1:5432

CLI 元命令:? 显示帮助,\q 退出,\dt 列出表,\d <table> 描述表结构。

JavaScript/TypeScript SDK 基本用法:用 import { connect } from "pg-micro" 连接 ":memory:" 或文件路径;支持 db.exec 执行 DDL/DML、db.prepare 创建预编译语句并 all/get/run 取行或绑定参数执行、db.close 关闭。参数化查询支持 $1、$2 等占位符。事务可用 BEGIN/COMMIT/ROLLBACK 手动管理。TypeScript 中可通过泛型为预编译语句指定结果类型,例如 db.prepare<User>。

服务器模式与 psql / ORM:启动 pgmicro myapp.db --server 127.0.0.1:5432 后,可用 psql -h 127.0.0.1 -p 5432 -U turso -d main 连接,也可用 libpq 连接串(如 postgresql://turso@127.0.0.1:5432/main)连接;node-postgres(pg)客户端可指定 host、port、user、database 后正常查询。

架构概述 PostgreSQL SQL → libpg_query(真正的 PG 解析器)→ PG 解析树 → 翻译器(parser_pg/)→ Turso AST → Turso 编译器 → VDBE 字节码 → 字节码引擎(vdbe/)→ SQLite B-tree 存储(.db 文件)。生成的 .db 文件是标准 SQLite 数据库,可用 DB Browser for SQLite、sqlite3 CLI 或任意 SQLite 库打开。PostgreSQL 系统目录表(pg_class、pg_attribute、pg_type、pg_namespace)以虚拟表形式暴露,使 psql 的 \dt、\d 等元命令可以正常工作。

支持的 PostgreSQL 特性 包括 SERIAL/自增、美元引用字符串、类型转换语法(如 '42'::int、NOW()::text)、JSON 操作符(在已实现范围内)、标准 PG 类型(INT、FLOAT8、TEXT、BOOLEAN、TIMESTAMP、JSON)以及 PostgreSQL 风格约束(PRIMARY KEY、NOT NULL、CHECK、DEFAULT)。

常见模式

  • 每请求临时数据库(AI 智能体、沙箱):为每个会话创建独立的内存数据库,无需清理。
  • 直接检查 SQLite 文件:用 sqlite3 CLI 查看表和 schema。
  • 通过 pg 目录做 schema 内省:查询 pg_tables、information_schema.columns 等。

适用场景 适合需要嵌入式的 PostgreSQL 语法数据库、单文件或内存数据库、在 Node.js/浏览器中使用数据库能力的场景,以及希望用 psql 或 ORM 以 PostgreSQL 协议连接的测试与沙箱环境。

限制 pgmicro 是实验性项目,并非所有 PostgreSQL 功能都已被翻译。常见缺口包括:带复杂 PL/pgSQL 的存储过程、窗口函数、CTE(可能部分支持)、COPY 命令。线协议服务器只支持 PostgreSQL 线协议的子集,部分高级客户端功能(SSL、SCRAM 认证、扩展查询协议的边界情况)可能尚未实现,建议尽可能使用简单查询模式。故障排查方面:SERIAL 不自增时避免显式插入 NULL 到 id 列;psql 元命令无输出时确认表建在默认的 public schema;文件数据库不持久化时检查是否传了真实路径而非 :memory: 以及写权限;从源码构建报错时需要较新的稳定 Rust 工具链以及 libpg_query 本地依赖(C 编译器、cmake)。

资源 GitHub:glommer/pgmicro;上游引擎 Turso;libpg_query(PostgreSQL 解析器提取库);pg_query Rust crate;npm:pg-micro。