类型映射字典(15 个用例已跑)· 全量分块与一致性起点 · plan 的输出与确认规则
plan 里列出来,用户确认才继续。其余按字典:金额永远走 decimal(不许 float 糊过去)、jsonb→json 丢键序、bigint unsigned→numeric(20,0)、数组落地 JSON 需确认。
| 主键形态 | 策略 | 断点粒度 |
|---|---|---|
| 单列整型 | min/max 均分区间 | 块 |
| 复合主键 | 首列切区间 + 块内 keyset 游标 | 块 |
| 文本 / UUID | keyset 游标(pk > last ORDER BY pk LIMIT n) | 块 |
| 无主键(PG) | 按 ctid 区间 | 块 |
| 无主键(MySQL) | 只能单连接顺序扫(隐藏 rowid 不可用) | 表(失败整表重来) |
EXPORT_SNAPSHOT → 每个分块连接 SET TRANSACTION SNAPSHOT,所有块看到同一时刻FLUSH TABLES WITH READ LOCK 取位点 → START TRANSACTION WITH CONSISTENT SNAPSHOT → 解锁lookback 回看窗口 + upsert 幂等去重;如实标注极小重复可能并发默认 4 连接(上限 16),每连接 QPS 上限 200,块间可 sleep;plan 把「内存 ≈ 并发 × 块行数 × 行宽」算给用户看。
预检 3 项需要注意
[auto] PG-02 max_replication_slots 余量 0 → 改为 12(ALTER SYSTEM + reload)
undo: ALTER SYSTEM SET max_replication_slots = 10;
[dba ] PG-01 wal_level = replica,需要 logical(要重启实例)
影响:连接中断 10–30 秒;WAL 增长约 10–20%
[info] PG-07 本版本无 slot 磁盘阀 → 改用「落后 5 GB 暂停并告警」
范围 12 张表,估算 8.4 M 行 / 2.1 GB(orders 占 71%)
将执行 4 个动作(写库,需确认)· 预计初始化 6–9 分钟,之后 p99 约 40 ms
| 情况 | 行为 |
|---|---|
| 全是 ok / auto | 问一次「执行以上 4 个动作?」 |
| 有需确认(类型/代价) | 逐条列出差异,必须显式 --accept |
| 有 blocked | 退出码 3 + 定制教程,没有忽略开关 |
| CI 环境 | --json + 退出码,绝不弹交互 |
internal/catalog/typemap.go + typemap_test.go —— 15 个表驱动用例已在 CI 里跑(含 tinyint(1) 溢出、utf8mb4 行宽、数组落地)。docs/TYPE-MAPPING.md(双向表 + 三个坑 + 探测兜底)、docs/SNAPSHOT.md(分块/并发/一致性/断点/接缝)、docs/PLAN.md(人类模板 + --json schema + 交互规则)。9c54f46,CI 绿。