☰
pgmicro CLI 完全指南:交互式命令行、\dt 元命令与文件数据库实战
2026/10/14 18:03:29 网站建设 项目流程

【免费下载链接】pgmicro

An in-process reimplementation of PostgreSQL, backed by a SQLite-compatible storage engine

项目地址:https://gitcode.com/gh_mirrors/pg/pgmicro
点击查看免费下载

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.db
pgmicro> 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.db
pgmicro> 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 main
main=> 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

项目地址:https://gitcode.com/gh_mirrors/pg/pgmicro
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询