Files
opsxdb/docs/DATABASE-OPERATIONS-AUDIT.md
T
logan 2c0bfafd8d 同步完整源码至远程:扁平化重构现状 + 未入库源文件
- 补入库:server/internal/db/dump.go、redis 分页/扫描预算测试、opsxdb-mcp main_test、
  packages/opsxdb-mcp package-lock、docs 审计与对比文档等 37 个新文件
- 含结构扁平化进行中的 80 处修改与 155 处旧结构删除(server/ src/ src-tauri/ 为当前有效源)
- 构建产物(bin/target/dist)与签名私钥仍按规则排除
2026-10-16 03:47:33 +08:00

95 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 库、表与数据迁移功能缺项盘点
更新:2026-10-14(同日复核一轮:右键与复制主路径已落地,本文相关条目同步;代码现状以根级 `src` / `src-tauri` / `server` 布局核查)。依据当前 OpsxDB 代码以及 DBFlux、dbx、RustGrid 本地源码/文档静态核查;未运行参考项目,能力存在不等于所有引擎已验证。本文优先于早期「整表导出尚未实现」等笼统表述。
## 已确认的现状
- 按用户要求移除工作台「执行计划」按钮、结果「计划」页签及其前端执行处理。底层 API 保留兼容,不列入近期开发。
- 表/视图节点下有字段分组(对象树自带);表节点另有索引、外键、触发器分组(`TableMetadataTree`,按驱动 DDL 能力挂载)。目录查询覆盖 MySQL 系列、PG 系列、SQLite,未适配引擎明确提示而非伪装空列表,尚待真库验证。
- 右侧/结果区「结构」页有字段列表,索引/外键/触发器区块已复用对象树的目录查询,覆盖 MySQL 系列、PG 系列和 SQLite;每组单独显示加载、失败重试、空态与截断。编辑入口在表右键「设计表」,MySQL 普通索引可编辑,外键/触发器仍只读;真实数据库兼容性待验收。
- 已有当前结果 CSV/JSON/INSERT 导出及服务端整表、完整查询导出入口;表右键已有 CSV/JSON 导出与 SQL 三态转储。这些有行数上限的导出不等于数据库备份。
- 编辑器/结果/对象树右键主路径已于 2026-10-14 补齐一轮(格式化、注释、查找替换、定义跳转、复制与导出、SELECT/INSERT 模板、新建查询带库),验收状态以 BACKLOG §3 为准;本文只保留与结构、表设计、迁移相关的条目。AI 晚到 SQL 的原标签、未保存状态和切库保护已补回归。
- Redis 键浏览/编辑已有独立面板(`RedisKeyPane`),非本盘点的关系对象迁移范畴。
## 库与 Schema
| 操作 | OpsxDB 状态 | 缺口与优先级 |
|---|---|---|
| 新建查询、刷新、复制名称/连接地址 | 已有(另含设为默认库、删除库、限定名与主机端口复制) | 菜单键盘、焦点、视口约束已统一实现(2026-10-14),待桌面验收;剩余为禁用项说明的一致性 |
| 默认库切换 | 部分 | P1:PG Schema/search_path 与会话隔离验证;显示实际生效目标 |
| 新建数据库 / Schema | 缺少可视化流程 | P1:库名、字符集/排序规则或 owner 按方言开放,预览 SQL |
| 删除数据库 | 有能力裁剪入口 | P1:验收目标确认、权限失败、删除后连接与标签刷新 |
| 查看/修改库属性 | 缺少 | P2:编码、排序规则、大小、注释;可修改项按引擎限制 |
| 批量选择表 | 缺少 | P1:为多表导出/备份提供选择,不优先批量删除 |
| 视图、过程、函数定义管理 | 列表 + 视图可展开字段、复制建表/视图 SQL | P2:查看/复制定义已部分具备,新建/修改/删除、参数调用仍缺;按引擎支持 |
| 用户/权限、服务器管理 | 缺少 | 后置:不挤占表设计和迁移优先级 |
## 表与表设计
| 操作 | OpsxDB 状态 | 缺口与验收要求 |
|---|---|---|
| 查看数据、前 N 行、查看结构/DDL | 已有 | 右侧结构已统一字段及三组目录;P1:点击树中索引定位对应详情,并以真库验证权限、方言差异与刷新行为 |
| 新建表 | 设计器 v1 已落地(2026-10-14):库右键「新建表…」/表右键「设计表…」,字段网格 + 方言化 CREATE 预览 + 应用 | P0:真库验收新建→改字段→改主键全流程;表选项(引擎/字符集)后置 |
| 新增/修改/删除字段 | 设计器 v1 支持列级 diff ALTER(MySQL 族 ADD/DROP/MODIFY/CHANGE、PG 族 TYPE/NOT NULL/DEFAULT/RENAME;SQLite 仅 ADD) | P0:真库各方言验收;结构漂移重校验(执行前被外部修改)后置 |
| 主键管理 | 设计器 v1 支持主键组变更(ADD/DROP PRIMARY KEY) | P0:复合主键真库验收;不把普通索引当主键 |
| 创建/修改/删除索引 | MySQL 系列设计器可编辑普通 BTREE/唯一及复合索引,实时预览 DROP/ADD;前缀、FULLTEXT、SPATIAL、降序等特殊索引只读。PG/SQLite 仍只读 | P0:MySQL 真库验证索引重建与外部结构漂移;PG 并发索引等高级项后置 |
| 外键管理 | 仅查看 | P1:多列映射、引用表列、ON DELETE/UPDATE;依赖检查 |
| 检查约束 | 未接入树/设计器 | P2:读取/创建/删除,按引擎版本裁剪 |
| 触发器 | 主要是查看 | P2:源码查看/编辑与 DDL 预览;避免假定支持原地 ALTER |
| 重命名表、修改表注释 | 缺少专用操作 | P1:方言转义、名称冲突、成功后刷新和旧标签提示 |
| 克隆为新表 | 缺少 | P1:仅结构/结构+数据;明确索引、外键、触发器是否复制 |
| 清空/截断、删除表 | 已有危险确认入口 | P1:区分 DELETE 与 TRUNCATE,事务/自增/外键语义及失败反馈 |
| 生成 SQL | 表右键「生成 SQL」折叠组提供 SELECT/INSERT/UPDATE/DELETE/DDL;新开带库查询,更新/删除有主键时填 WHERE 占位,不自动执行 | P1:复合主键、生成列/自增列和各方言参数占位符真库校验 |
| 表数据新增/修改/删除 | 部分内联修改、粘贴和删除 | P1:新增行、待提交变更、明确 NULL 编辑、多行部分失败反馈,避免并发回滚覆盖 |
| 表关系图、结构比较、数据比较 | 缺少 | 结构比较 P1(只读差异,目标选择和过滤);数据比较 P2(主键、同构、分页/限量);关系图后置 |
设计器现状:字段、索引、外键、触发器、SQL 预览分区;大弹窗、紧凑密度、MySQL 表注释、普通索引编辑,外键/触发器只读。应用前展示 DDL 并确认,读取元数据失败或存在不支持的修改时禁止应用。未含:外键/触发器图形编辑、引擎/字符集选项、草稿保留(关闭即丢)、结构漂移重校验、SQLite 重建表流程;这些仍是后续项。
## 导出、导入、备份与恢复
| 能力 | OpsxDB 状态 | 必须补齐的闭环 |
|---|---|---|
| 当前结果 CSV/JSON/INSERT | 已有 | P1:范围、编码、NULL/换行/大整数、取消/保存失败回归 |
| 整表 / 完整查询导出 | 表右键可导出 CSV/JSON,输入 1–500000 行上限(默认 100000);服务端流式取数,不受前端结果分页限制。右键还可转储 SQL 三态(仅结构/仅数据/结构和数据) | P1:上限命中时服务端给出明确截断标志、列与条件选择、进度/取消、大表内存验证;目前文件达到上限不能判定是否完整,不可当备份 |
| 表结构 SQL 导出 | 表右键转储「仅结构/结构和数据」已可保存 .sql | P1:多表选择、对象依赖顺序;视图/过程/函数纳入 |
| CSV 导入 | 缺少向导 | P0:文件预览、编码/分隔符、表头、字段映射、类型/NULL、批次、事务策略、错误行报告 |
| SQL 文件执行/导入 | 缺少完整流程 | P1:大文件流式读取、方言分隔符、进度/取消、失败位置;不是简单按分号切开 |
| JSON/Excel 导入导出 | JSON 结果导出已有,其他缺少 | P2:先 CSV;Excel 为可选扩展,不先堆格式 |
| 单表 / 多表逻辑备份 | 缺少 | P1:结构+数据、索引/约束/触发器范围、快照一致性说明、产物清单 |
| 整库逻辑备份 | 缺少 | P1:MySQL/PG 优先,评估原生 dump 工具依赖或自有导出;凭据不放命令行/日志 |
| 备份恢复 | 缺少 | P1:目标库确认、冲突策略、对象顺序、失败报告,完成后实际验证可恢复性 |
| 定时备份/保留策略/历史 | 缺少 | P2:手动备份恢复验收后再做;桌面退出时不承诺继续运行 |
| 物理备份、PITR、binlog/WAL 归档 | 无 | 不纳入近期桌面客户端范围;逻辑 SQL 导出不能冒充灾备 |
## 三个参考项目取舍与证据
| 参考 | 静态证据 | 借鉴内容 |
|---|---|---|
| dbx | `docs/content/docs/table-structure.cn.mdx`;`crates/dbx-core/src/table_structure_sql/` 的 columns/indexes/foreign_keys/sqlite_rebuild/validation;结构编辑器并发与元数据重校验测试 | 字段/索引设计、能力裁剪、DDL 预览、草稿与结构漂移校验,作为表设计主要参考 |
| dbx | `crates/dbx-web/src/routes/table_export.rs`(CSV/JSON/XLSX/SQL、进度、取消)、`docs/content/docs/database-backup.cn.mdx`、`crates/dbx-core/src/sql_file_import/table_restore.rs` | 借鉴导出任务反馈、立即备份与恢复;XLSX 按真实需求后置,不把有限行导出称为备份 |
| navop | `crates/db_view/src/compare/`、`import_export/table_import_view.rs` | 比较目标、差异预览、失败状态与导入映射。优先只读结构差异,再做按主键的数据比较;同步执行需独立确认与回滚策略 |
| AnotherRedisDesktopManager | `src/components/OperateItem.vue`、`MemoryAnalysis.vue`、`src/redisClient.js` | 搜索输入、取消/分批 SCAN 与集群节点处理;不引入会阻塞服务器的 KEYS 全量搜索 |
| DBFlux | `crates/dbflux_ui_document/src/import_wizard/column_mapping.rs`、`export_wizard/`、`crates/dbflux_export/src/streaming.rs`、`dbflux_ui_sidebar/src/operations/export_tables.rs` | 导入映射、按对象直达导出、步骤层级与流式任务。不能仅凭 schema_alter policy 推断完整设计器已成熟 |
| RustGrid | `README_zh.md`、`crates/rustgrid-backup/src/lib.rs`、`crates/rustgrid-app/src/app/backup.rs`、`crates/rustgrid-postgresql/src/backup.rs` | 中文导入导出向导、备份/还原成对入口;不优先复制专有 .rgbak 格式,先通用 SQL/CSV |
上述 dbx/navop/dbflux/rustgrid 路径相对 `/Users/logan/devops/demo/db-gui/`,Redis 参考项目位于 `/Users/logan/devops/demo/db-client/`。本文不因参考项目声明功能就宣称其全部驱动均通过验收。
Navicat 截图的数据库/表/视图与工具图标用于辨识和层级参考;OpsxDB 保留自有 SVG 图标与紧凑桌面工具栏,不复制其图形资产或将比较、备份按钮提前摆在主工具栏。结构比较 P1 先只读展示字段、索引、约束差异;数据比较 P2 要求同构表、明确主键、限量取样与差异统计,跨库同步和无主键全表比较后置。导入以 CSV 预览→字段映射→批量执行→错误报告为 P0;导出优先 CSV/JSON/SQL INSERT/结构 SQL,XLSX 为 P2,整库逻辑备份必须能恢复验证。
## 推荐开发顺序
1. **结构查看验收**:目录查询与错误/空态已复用;补树节点定位结构详情,并用 MySQL、PG、SQLite 真库核对索引、复合外键和触发器。
2. **表设计器验收**:字段网格、MySQL 普通索引、结构只读页签与 DDL 确认已落地;MySQL 3306 旧版建表/转储验收不覆盖本轮索引改造。下一步真库验收索引重建与结构漂移重校验。
3. **日常迁移**:CSV 导入 + 表右键导出 + SQL 文件执行;有进度、取消与错误报告。
4. **备份恢复**:先手动单库逻辑备份并完成恢复演练,再多库/定时。
5. **按需扩展**:外键/触发器编辑、克隆、关系图/比较,不把整个管理平台塞入默认右键菜单。
验收矩阵应覆盖:空表/大表/复合主键/无主键/权限不足/断连/取消/名称特殊字符/跨标签切换/结构被外部修改;每种方言单独记录。规划项未实现前不在产品中放置伪可用入口。
## 本地质量复核
- 前端构建/类型检查通过,60 项前端测试通过;Go 编译和 2 项无监听的 Redis 扫描预算测试通过,差异空白检查通过。homepage 未改动。
- 复核修正:结构页不再把索引等目录查询报错显示为「无」,三组分别加载、报错重试;AI 异步生成 SQL 保留原标签与未保存标记,用户修改 SQL 或切库后不覆盖。
- 2026-10-14 晚补充:设计器 v1(tableDdl 11 项单测,前端合计 75 项全绿)、`/api/db/dump` 三态转储、`⌘/` 注释快捷键修正(帮助改 `⌘⇧/`);MySQL 3306 真库端到端验证建表、插数与三种转储输出后已清理测试库。
- 尚未完成:真实 MySQL/PG/SQLite 的结构目录校验、桌面视觉/右键/剪贴板验收、表设计与导入备份闭环。完整 Go 集成测试中的本地监听用例在当前受限环境不能运行;这不等于真实数据库验收通过。