Files
momentry_core/docs_v1.0/UUID_CLEANUP_PLAN.md
Warren 4d75b2e251 docs: update docs_v1.0/ documentation
- Fix markdown lint issues (MD030, MD047, MD051, MD028, MD005)
- Update AI agents, architecture, implementation docs
- Add new identity, face recognition, and API documentation
- Remove deprecated face/person API guides
2026-04-30 15:10:41 +08:00

6.2 KiB
Raw Permalink Blame History

UUID 清理方案

Date: 2026-04-28 21:25 Issue: Charade 1963 视频注册了 392 次


问题统计

UUID 类型 数量 face_detections birth_registration
384b0ff44aaaa1f14cb2cd63b3fea966 Legacy (16 chars) 1 78 条 NULL
44ce835fa... Birth (32 chars) 391 0 条

总计: 392 条重复记录


清理方案

方案 A: 保留 Legacy UUID + 添加 Birth Registration推荐

优点:

  • 保留已有 face_detections 数据78 条)
  • 无需迁移数据
  • 添加 birth_registration 即可

步骤:

  1. 删除 391 个 Birth UUID videos
  2. 为旧 UUID 添加 birth_registration
  3. 清理重复记录

SQL:

-- 1. 删除重复的 Birth UUID videos
DELETE FROM dev.videos 
WHERE file_name = 'Old_Time_Movie_Show_-_Charade_1963.HD.mov'
  AND LENGTH(uuid) = 32;

-- 2. 为旧 UUID 添加 birth_registration
UPDATE dev.videos
SET birth_registration = jsonb_build_object(
    'registration_source', jsonb_build_object(
        'username', '',
        'timestamp', NOW(),
        'mac_address', 'ba:f5:ee:bc:45:78',
        'original_path', '/Users/accusys/momentry/var/sftpgo/data/demo',
        'original_filename', 'Old_Time_Movie_Show_-_Charade_1963.HD.mov'
    )
)
WHERE uuid = '384b0ff44aaaa1f14cb2cd63b3fea966'
  AND birth_registration IS NULL;

-- 3. 验证结果
SELECT uuid, LENGTH(uuid), birth_registration IS NOT NULL as has_birth
FROM dev.videos
WHERE file_name LIKE '%Charade%';

预期结果:

  • videos: 1 条384b0ff44aaaa1f14cb2cd63b3fea966
  • face_detections: 78 条(保留)
  • birth_registration: 已添加

方案 B: 保留 Birth UUID + 迁移 face_detections

优点:

  • 使用新格式 UUID32 chars
  • 符合 V4.0 规范

缺点:

  • 需迁移 face_detections.file_uuid
  • 需迁移其他关联表chunks, pre_chunks, processor_results

步骤:

  1. 选择最新的 Birth UUID例如 44ce835fa...
  2. 迁移 face_detections.file_uuid
  3. 删除其他 Birth UUID
  4. 删除旧 UUID

SQL:

-- 1. 选择保留的 Birth UUID
SELECT uuid FROM dev.videos 
WHERE file_name = 'Old_Time_Movie_Show_-_Charade_1963.HD.mov'
  AND LENGTH(uuid) = 32
ORDER BY created_at DESC LIMIT 1;
-- 结果: 7a9f660f1a87ea1ce474a2f2b648c013

-- 2. 迁移 face_detections
UPDATE dev.face_detections
SET file_uuid = '7a9f660f1a87ea1ce474a2f2b648c013'
WHERE file_uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

-- 3. 迁移其他表
UPDATE dev.chunks
SET uuid = '7a9f660f1a87ea1ce474a2f2b648c013'
WHERE uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

UPDATE dev.pre_chunks
SET file_uuid = '7a9f660f1a87ea1ce474a2f2b648c013'
WHERE file_uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

-- 4. 删除旧 UUID video
DELETE FROM dev.videos WHERE uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

-- 5. 删除其他 Birth UUID
DELETE FROM dev.videos 
WHERE file_name = 'Old_Time_Movie_Show_-_Charade_1963.HD.mov'
  AND uuid != '7a9f660f1a87ea1ce474a2f2b648c013';

方案 C: 全部删除 + 重新注册

优点:

  • 干净重新开始
  • 使用正确的 Birth UUID 生成流程

缺点:

  • 丢失所有 face_detections 数据
  • 需重新运行 Face processor

步骤:

  1. 删除所有 Charade videos392 条)
  2. 删除关联数据
  3. 手动注册一次
  4. 运行 Face processor

SQL:

-- 1. 删除所有 videos
DELETE FROM dev.videos 
WHERE file_name = 'Old_Time_Movie_Show_-_Charade_1963.HD.mov';

-- 2. 删除 face_detections因为 file_uuid FK
DELETE FROM dev.face_detections 
WHERE file_uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

-- 3. 删除 chunks
DELETE FROM dev.chunks 
WHERE uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

-- 4. 删除 pre_chunks
DELETE FROM dev.pre_chunks 
WHERE file_uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

重新注册:

# 停止 watcher避免重复注册
# 手动注册一次
curl -X POST http://localhost:3003/api/v1/register \
  -H "X-API-Key: muser_test_001" \
  -d '{"path": "/Users/accusys/momentry/var/sftpgo/data/demo/Old_Time_Movie_Show_-_Charade_1963.HD.mov"}'

推荐: 方案 A

理由:

  1. 保留已有数据78 face_detections
  2. 无破坏性更改
  3. 添加 birth_registration 即可符合 V4.0

影响范围:

  • 仅删除 391 个重复 videos无数据
  • face_detections 不受影响
  • chunks 不受影响

执行前检查

# 1. 检查 face_detections FK
psql -U accusys -d momentry -c "
SELECT COUNT(*) FROM dev.face_detections 
WHERE file_uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';
"

# 2. 检查 chunks
psql -U accusys -d momentry -c "
SELECT COUNT(*) FROM dev.chunks 
WHERE uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';
"

# 3. 检查 pre_chunks
psql -U accusys -d momentry -c "
SELECT COUNT(*) FROM dev.pre_chunks 
WHERE file_uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';
"

执行命令

方案 A 执行(推荐)

psql -U accusys -d momentry <<'EOF'
-- Step 1: 删除重复 Birth UUID
DELETE FROM dev.videos 
WHERE file_name = 'Old_Time_Movie_Show_-_Charade_1963.HD.mov'
  AND LENGTH(uuid) = 32;

-- Step 2: 添加 birth_registration
UPDATE dev.videos
SET birth_registration = jsonb_build_object(
    'registration_source', jsonb_build_object(
        'username', '',
        'timestamp', NOW(),
        'mac_address', 'ba:f5:ee:bc:45:78',
        'original_path', '/Users/accusys/momentry/var/sftpgo/data/demo',
        'original_filename', 'Old_Time_Movie_Show_-_Charade_1963.HD.mov'
    )
)
WHERE uuid = '384b0ff44aaaa1f14cb2cd63b3fea966';

-- Step 3: 验证
SELECT uuid, LENGTH(uuid), birth_registration IS NOT NULL 
FROM dev.videos 
WHERE file_name LIKE '%Charade%';
EOF

后续建议

  1. 修复 watcher:避免重复注册同一文件
  2. 添加去重逻辑:检查文件是否已注册
  3. 使用稳定的 Birth UUID:基于 filename hash不含 timestamp

验证清单

  • 删除 391 个重复 videos
  • 保留 1 个 UUID384b0ff44aaaa1f14cb2cd63b3fea966
  • 添加 birth_registration
  • face_detections 数据完整78 条)
  • chunks 数据完整3664 条)
  • pre_chunks 数据完整3664 + 1332 条)

相关文档

  • docs_v1.0/UUID_LENGTH_ISSUE.md - UUID 长度问题分析
  • docs_v1.0/PORTAL_FACE_DEMO_PLAN.md - Portal Face 演示计划