fix(fam-core): 修复 sync_identity_map 增量同步 1062 主键冲突导致游标卡死
Oracle→NAS 增量同步反复报 (1062, "Duplicate entry '1073-汤圆' for key 'uq_video_raw_uid'"),整批失败、游标永不推进,同步状态页卡在"同步中"。 根因:sync_identity_map 以 Oracle person_identity_map.id(代理自增键) 作 NAS 主键,但 Oracle 库重建/恢复后这个 id 会被复用——实测 Oracle 现在 的 id=744 对应 (1073,'汤圆'),NAS 上 id=744 还是旧的 (1302,'人物E')。 upsert 先按 PK id 命中旧行,UPDATE 成 (1073,'汤圆') 后与已存在的同名行 在 uq_video_raw_uid 上二次冲突。 修复:镜像表改为 NAS 本地自增 id 主键,业务键 (video_id, raw_uid) 唯一, Oracle 的 id 只落 oracle_id 列做溯源;upsert 的 UPDATE 子句不再改写 video_id/raw_uid 这两个键列,只更新 oracle_id/canonical_name/source 等。 ddl.sql 同步更新表定义。 已在 NAS 上完成现网迁移(ADD COLUMN oracle_id -> 回填 -> 主键改自增)并 验证:补拉同步成功恢复,游标正常推进,手动触发同步验证通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -188,8 +188,12 @@ CREATE TABLE IF NOT EXISTS sync_cursor (
|
||||
-- 7.5 人物对应关系表(Oracle person_identity_map 镜像,2026-08-22 新增)
|
||||
-- 闭集人物识别:某视频里 Gemini 给的原始 uid 与解析出的规范名(爷爷/爸爸/媳妇/
|
||||
-- 汤圆)之间的映射,供事件时间轴"纠错"按钮定位、追溯识别来源
|
||||
-- v2 (2026-08-29):id 改为 NAS 本地自增主键,业务键 (video_id, raw_uid) 唯一;
|
||||
-- Oracle 的 person_identity_map.id 只落 oracle_id 列溯源。原以 Oracle id 为主键,
|
||||
-- 一旦 Oracle 库重建/复用 id 会引发 uq_video_raw_uid 二次冲突 (1062)。
|
||||
CREATE TABLE IF NOT EXISTS sync_identity_map (
|
||||
id INT PRIMARY KEY COMMENT 'Oracle person_identity_map.id',
|
||||
id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'NAS 本地自增主键',
|
||||
oracle_id INT COMMENT 'Oracle person_identity_map.id(仅溯源参考)',
|
||||
video_id INT NOT NULL COMMENT '关联 sync_videos.id',
|
||||
raw_uid VARCHAR(100) COMMENT '该视频里 Gemini 给的原始 uid',
|
||||
canonical_name VARCHAR(100) COMMENT '当前生效的规范名',
|
||||
|
||||
Reference in New Issue
Block a user