【免费下载链接】pgmicro
An in-process reimplementation of PostgreSQL, backed by a SQLite-compatible storage engine
pgmicro 是一款进程内(in-process)的 PostgreSQL 重新实现,底层由 SQLite 兼容的存储引擎驱动。它的 CLI 提供交互式命令行(REPL)、\dt等类 psql 元命令,以及单文件数据库能力——无需部署 PostgreSQL 服务器,就能用一个文件跑起真正的 PostgreSQL 语法。
为什么选 pgmicro?🚀
传统做法要么维护一套 PostgreSQL 服务器,要么受限于 SQLite 的语法。pgmicro 走了一条不同的路:它不翻译PostgreSQL 到 SQLite 文本,而是直接用官方解析器解析 PG 语法,再编译成 SQLite 字节码执行。整体数据流如下:
PostgreSQL SQL → PG 解析树 → 翻译为引擎 AST → 编译为字节码 → SQLite 存储(B-tree / WAL)这意味着你写的是地道的 PostgreSQL(SERIAL、::强转、$$ 美元引用 $$、JSON 操作符等),而数据最终落在一个标准的.db文件里。底层引擎能力见下图:
💡 关键:pgmicro 把 PostgreSQL 的元数据暴露为
pg_class、pg_attribute、pg_type等虚拟系统表,这正是\dt等元命令能工作的原因,源码见 core/pg_catalog.rs。
快速开始:3 步进入交互式命令行
方式一:零安装体验(推荐新手先跑通)
npx pg-micro方式二:全局安装
npm install -g pg-micro pgmicro启动后你会看到如下欢迎信息,并进入pgmicro>提示符:
pgmicro v0.6.0-pre.7 Type \? for help, \q to quit. Connected to a transient in-memory database. pgmicro> CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT); pgmicro> INSERT INTO users (name) VALUES ('Alice'), ('Bob'); pgmicro> SELECT * FROM users; ┌────┬───────┐ │ id │ name │ ├────┼───────┤ │ 1 │ Alice │ │ 2 │ Bob │ └────┴───────┘不传参数时默认打开临时内存库,退出即清空,适合练手。
交互式命令行(REPL)三大细节 🔍
| 细节 | 说明 |
|---|---|
| 主提示符 | pgmicro>,每行以分号分隔语句 |
| 多行续行 | 未写完时提示符变为pgmicro->,写完整条 SQL 后回车执行 |
| 历史记录 | 自动保存到~/.pgmicro_history,用 ↑/↓ 可回翻上一条命令 |
| 中断 | 按Ctrl-C一次会提示退出,再按一次强制退出 |
多行输入非常实用,长查询、多表JOIN都能换行书写,可读性更好:
pgmicro> SELECT u.name, COUNT(o.id) pgmicro-> FROM users u pgmicro-> JOIN orders o ON o.user_id = u.id pgmicro-> GROUP BY u.name;\dt 等元命令速查表 ⚡
pgmicro 兼容 psql 的反斜杠(\)元命令,全部由 pgmicro/src/main.rs 的handle_meta_command分发。输入\?可随时打印帮助。
| 元命令 | 作用 |
|---|---|
\dt | 列出public下的所有表 |
\dt+ | 扩展列出表(含估算行数) |
\d <table> | 查看表结构(列 / 类型 / 可空 / 默认值) |
\d+ <table> | 扩展查看(额外列出索引、约束) |
\di | 列出所有索引 |
\dv | 列出所有视图 |
\dn | 列出所有 schema |
\dT | 列出自定义类型 |
\du/\dg | 列出角色 |
\df | 列出函数 |
\l | 列出数据库 |
\x | 切换展开(纵向)显示 |
\timing | 切换查询计时 |
\echo <text> | 打印文本 |
\conninfo | 显示连接信息 |
\? | 显示帮助 |
\q | 退出 |
实际效果示例:
pgmicro> \dt +-------+ | Table | +=======+ | users | +-------+ pgmicro> \d users Table: users +--------+------+----------+---------+ | Column | Type | Nullable | Default | +========+======+==========+=========+ | id | int4 | NULL | YES | | name | text | NULL | | +--------+------+----------+---------+ pgmicro> \timing Timing is on. pgmicro> SELECT 1; Time: 0.412ms小技巧:SELECT * FROM pg_tables WHERE schemaname='public'与\dt查的是同一份系统表数据,两者可互相印证。
文件数据库实战:从内存到持久化 💾
把内存库换成文件只需传入一个路径,数据将持久落盘:
pgmicro myapp.dbpgmicro> CREATE TABLE events (id INT, payload TEXT, ts TEXT DEFAULT CURRENT_TIMESTAMP); pgmicro> INSERT INTO events (id, payload) VALUES (1, 'user.signup'); pgmicro> \q退出后数据仍在。重新打开即可继续查询:
pgmicro myapp.dbpgmicro> SELECT * FROM events; ┌────┬─────────────┬─────────────────────┐ │ id │ payload │ ts │ ├────┼─────────────┼─────────────────────┤ │ 1 │ user.signup │ 2025-03-26 12:00:00 │ └────┴─────────────┴─────────────────────┘关键点:这个文件是标准的 SQLite 数据库,用任意 SQLite 工具都能直接打开检查:
$ file myapp.db myapp.db: SQLite 3.x database写入如何被可靠提交到磁盘,下图展示了引擎为每条记录维护带版本号的事务日志(begin/end标记):
🔒 建议:生产数据务必定期备份
.db文件;也可用--readonly只读打开,避免误改。
进阶:用 psql 直连(服务器模式)🌐
pgmicro 自带一个PostgreSQL 线协议服务器,标准 PG 客户端即可连接:
pgmicro :memory: --server 127.0.0.1:5432另开一个终端,用 psql 连入:
psql -h 127.0.0.1 -p 5432 -U turso -d mainmain=> CREATE TABLE users (id INT, name TEXT); main=> INSERT INTO users VALUES (1, 'Alice'); main=> \dt List of tables Schema | Name | Type | Owner --------+-------+-------+------- public | users | table | turso (1 row)这让既有 PG 生态工具(ORM、迁移脚本、BI)可以直接对接 pgmicro。
常用 CLI 参数速查 ⚙️
参数定义见 pgmicro/src/main.rs。
| 参数 | 说明 |
|---|---|
database(位置参数) | 数据库文件路径,默认:memory: |
sql(位置参数) | 可选,执行一条 SQL 后立即退出(脚本模式) |
-q, --quiet | 启动时不打印欢迎信息 |
-v, --vfs <name> | 选择 VFS(如 memory、syscall 等) |
--readonly | 以只读模式打开数据库 |
-t, --tracing-output <file> | 将日志追踪写入文件 |
--server <addr> | 启动 PostgreSQL 线协议服务器(如0.0.0.0:5432) |
脚本模式下可以单行执行并据退出码判断成败:
pgmicro myapp.db "SELECT count(*) FROM users"总结与延伸阅读 📚
- 交互式命令行:
pgmicro即开即用,支持多行续行与历史回翻。 - 元命令:
\dt、\d、\l等类 psql 命令让查结构、查表、查索引变得极快。 - 文件数据库:一个
.db文件即一个标准 SQLite 库,可备份、可被任意工具打开。 - 服务器模式:
--server让 psql 等原生 PG 客户端直连。
想深入了解语法与内部机制,可继续查看:
- SQL 参考文档:docs/sql-reference/
- PostgreSQL 语法翻译层:parser_pg/src/translator.rs
- 通用 REPL 实现:cli/app.rs
- 项目特性说明(含实时物化视图):pgmicro/README.md
【免费下载链接】pgmicro
An in-process reimplementation of PostgreSQL, backed by a SQLite-compatible storage engine
相关推荐
Kimi Code CLI 命令完全指南:从交互式会话、非交互执行到全部子命令的实战参考
Kimi Code CLI 命令完全指南:从交互式会话、非交互执行到全部子命令的实战参考 kimi 是 Kimi Code CLI 的主命令(命令行入口),用于
AI Agent代码智能体人工智能大模型CLIApache DataFusion CLI 完整使用指南:命令行参数、交互式命令与配置管理
Apache DataFusion CLI 完整使用指南:命令行参数、交互式命令与配置管理 datafusion cli 是 Apache DataFusion
大数据数据分析后端TaskWeaver 命令行终端(CLI)完全指南:启动、交互与全部斜杠命令详解
TaskWeaver 命令行终端(CLI)完全指南:启动、交互与全部斜杠命令详解 TaskWeaver 提供了原生的命令行(CLI)交互界面,开发者可以在终端中
AI Agent数据分析
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考