Files
doc_ai_backed/cmd/migrate
yoge 9d712c921a feat: add PDF document recognition with 10-page pre-hook
- Migrate recognition_results table to JSON schema (meta_data + content),
  replacing flat latex/markdown/mathml/mml columns
- Add TaskTypePDF constant and update all formula read/write paths
- Add PDFRecognitionService using pdftoppm (Poppler) for CGO-free page
  rendering; limits processing to first 10 pages (pre-hook)
- Reuse existing downstream OCR endpoint (cloud.texpixel.com) for each
  page image; stores results as [{page_number, markdown}] JSON array
- Add Redis queue + distributed lock for PDF worker goroutine
- Add REST endpoints: POST /v1/pdf/recognition, GET /v1/pdf/recognition/:task_no
- Add .pdf to OSS upload file type whitelist
- Add migrations/pdf_recognition.sql for safe data migration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 14:17:44 +08:00
..
2026-01-27 17:40:15 +08:00

数据迁移工具

用于将测试数据库的数据迁移到生产数据库避免ID冲突使用事务确保数据一致性。

功能特性

  • 自动避免ID冲突使用数据库自增ID
  • 使用事务确保每个任务和结果数据的一致性
  • 自动跳过已存在的任务基于task_uuid
  • 保留原始时间戳
  • 处理NULL值
  • 详细的日志输出和统计信息

使用方法

基本用法

# 从dev环境迁移到prod环境
go run cmd/migrate/main.go -test-env=dev -prod-env=prod

# 从prod环境迁移到dev环境测试反向迁移
go run cmd/migrate/main.go -test-env=prod -prod-env=dev

参数说明

  • -test-env: 测试环境配置文件名dev/prod默认值dev
  • -prod-env: 生产环境配置文件名dev/prod默认值prod

编译后使用

# 编译
go build -o migrate cmd/migrate/main.go

# 运行
./migrate -test-env=dev -prod-env=prod

工作原理

  1. 连接数据库:同时连接测试数据库和生产数据库
  2. 读取数据从测试数据库读取所有任务和结果数据LEFT JOIN
  3. 检查重复:基于task_uuid检查生产数据库中是否已存在
  4. 事务迁移:为每个任务创建独立事务:
    • 创建任务记录自动生成新ID
    • 如果存在结果数据创建结果记录关联新任务ID
    • 提交事务或回滚
  5. 统计报告:输出迁移统计信息

注意事项

  1. 配置文件:确保config/config_dev.yamlconfig/config_prod.yaml存在且配置正确
  2. 数据库权限:确保数据库用户有读写权限
  3. 网络连接:确保能同时连接到两个数据库
  4. 数据备份:迁移前建议备份生产数据库
  5. ID冲突脚本会自动处理ID冲突使用数据库自增ID不会覆盖现有数据

输出示例

从测试数据库读取到 100 条任务记录
[1/100] 创建任务成功: task_uuid=xxx, 新ID=1001
[1/100] 创建结果成功: task_id=1001
[2/100] 跳过已存在的任务: task_uuid=yyy, id=1002
...
迁移完成统计:
  成功: 95 条
  跳过: 3 条
  失败: 2 条
数据迁移完成!