原始内容
pi-devops-tools
pi 的数据库工作区扩展 — 在终端里查询 MySQL 数据库、管理表关系。
功能
/db命令 — 交互式数据库工作区,支持多个子命令- SQL 查询 — 只读查询(SELECT、SHOW、DESCRIBE、EXPLAIN),结果自动格式化;无 LIMIT 的 SELECT 自动封顶(默认 100,可按连接配置)
- AI 写操作 —
db_mutate工具支持 INSERT/UPDATE/DELETE/REPLACE,每次需人工在 TUI 弹窗中确认 - 实时表结构 — 直接查询
information_schema,始终最新 - 查询历史 — 所有查询本地记录,支持关键词搜索
- 收藏查询 — 保存常用 SQL 模板,一键执行
- 表关系图 — 注册外键关系,BFS 自动联表查询
- 跨库查询 — 同一 MySQL 实例上的库可直接
db.tableJOIN,无需切换 - 状态栏 — 在 pi 底部状态栏显示当前数据库上下文
- 状态持久化 — 工作区状态跨会话保持
安装
Node.js 环境
pi 扩展运行需要 Node.js ≥ 20。如果你的 pi 尚未安装 Node.js 运行环境,pi 会在首次使用时提示安装。
验证:
pi node -- --version # 应输出 v20.x 或更高
安装扩展
从 npm 安装(推荐):
pi install npm:pi-devops-tools
从 GitHub 安装:
pi install git:github.com/zavier/pi-devops-tools
本地开发
git clone git@github.com:zavier/pi-devops-tools.git
pi install ./pi-devops-tools
配置
在 ~/.pi/database/connections.yaml 中配置数据库连接(用户级全局配置,跨项目共享):
connections:
prod-readonly:
environment: prod
type: mysql
host: db-prod.internal
port: 3306
username: readonly
password: ${DB_PASSWORD}
defaultDatabase: app_db
queryLimit: 50
staging:
environment: staging
type: mysql
host: 127.0.0.1
port: 3307
username: root
password: ${STAGING_DB_PASSWORD}
environment、type、host必填;type目前仅支持mysqlport默认3306,username默认rootpassword支持${环境变量}替换defaultDatabase可选 — 首次/db switch到该连接时自动选用queryLimit可选 — 无 LIMIT 的 SELECT 自动追加的行数上限(默认100)/db switch按environment分组展示连接
命令
/db
显示工作区面板,查看当前连接状态、可用连接和子命令。
/db
/db add
交互式 wizard 添加新数据库连接:选择环境 → 连接名 → host/port → 用户名/密码 → 默认数据库。
写入 connections.yaml 后自动 hot-reload,无需重启。
/db add
/db switch
交互式流程:选择环境 → 选择连接 → 选择数据库。
/db switch
/db tables
列出当前数据库中的所有表。
/db tables
/db schema [表名]
查看表结构(列、索引)。结果以 markdown 表格形式渲染并持久展示在聊天中。不带参数时显示可搜索的表列表。
/db schema users
/db query [表名|SQL]
查询数据。三种方式:
/db query → 交互选择:选表 + WHERE,或输入完整 SQL
/db query users → 选表模式(已知表名),输入 WHERE 条件
/db query SELECT * FROM users WHERE status = 'active' → 直接执行 SQL
参数是表名还是 SQL 由框架自动判断 — 命中已知表名走选表模式,以 SELECT/SHOW/DESCRIBE/EXPLAIN 开头则直接执行。
结果根据终端宽度自适应选择最佳展示格式(水平表格 → 转置 → 垂直键值对),ctrl+o 可展开查看全部行。
全 NULL 列、值全相同的列会被折叠并给出摘要提示。
/db history [关键词]
搜索查询历史。不带关键词显示最近 20 条记录。
/db history
/db history users
/db favorite
管理收藏的 SQL 模板。不带参数列出当前数据库的收藏,支持直接执行、编辑后执行或删除。
/db favorite → 列出当前数据库收藏
/db favorite add → 交互式添加收藏(名称 + SQL + 描述)
/db favorite add <名称> <SQL> → 直接添加,省略交互
收藏按数据库分组(全局收藏对所有数据库可见)。
/db relations
管理表关联关系。不带参数列出已注册的关系。
/db relations → 列出关系,选择后可删除
/db relations add → 交互式注册关系:选源表 → 源列 → 目标表 → 目标列 → 类型
/db relations remove → 选择删除已注册的关系
/db relations discover → 从 MySQL 外键约束自动发现并导入(可选 AI 分析补充)
/db relations er-diagram [表名] → 以该表为中心生成 mermaid ER 图
注册关系后,AI 会通过 db_register_relation 工具辅助完成 discover → 分析 → 注册的工作流。
LLM 工具
扩展注册了 7 个工具(6 个只读 + 1 个写操作),AI 可以直接调用而无需用户输入 /db 命令:
| 工具名 | 类型 | 描述 |
|---|---|---|
db_query |
只读 | 执行只读 SQL 查询(与 /db query 相同的安全限制) |
db_list_databases |
只读 | 列出已配置的连接及数据库 — 用于发现可用的连接/库名 |
db_list_tables |
只读 | 列出指定数据库的所有表(实时查询) |
db_table_schema |
只读 | 查看指定表的结构(列、索引) |
db_list_relations |
只读 | 列出已注册的表关系 — AI 可用于自行编写 JOIN |
db_register_relation |
只读 | 注册表关联关系(discover → AI 分析 → 注册闭环) |
db_mutate |
写 | 执行 INSERT/UPDATE/DELETE/REPLACE,每次弹出确认弹窗需人工批准 |
只读工具遵循与用户命令相同的只读保护:只能执行 SELECT/SHOW/DESCRIBE/EXPLAIN,DELETE/DROP/UPDATE 等写操作会被拒绝。db_query、db_list_tables、db_table_schema 支持可选的 connection/database 参数以跨库/跨连接查询。
db_mutate 用于数据修改:DDL(CREATE/DROP/ALTER/TRUNCATE)被硬性拒绝,UPDATE/DELETE 无 WHERE 时会显示警告。每次调用弹出 overlay 确认弹窗(Enter 确认 / Esc 取消),不可跳过。
数据存储
所有状态存储在 ~/.pi/database/ 下:
| 文件 | 用途 |
|---|---|
workspace.json |
当前环境/数据库选择 |
state.db |
查询历史、收藏、表关系的 SQLite 存储 |
connections.yaml |
连接定义 |
环境要求
- Node.js ≥ 20
- pi ≥ 0.80
better-sqlite3(自动安装)mysql2(自动安装)
License
MIT