# 水利安监数据库 — 数据迁移方案 ## 环境 | | Oracle(源) | 瀚高 PostgreSQL(目标) | |---|---|---| | 地址 | 同事本地测试库 | 192.168.0.149:5866/highgo | | Schema | SLAJ / SLAJ_UPDATE / SLAJ_PERSTEST / SLAJ_ROHS | **slaj**(153张空表已建好) | | 工具 | ora2pg | psql / \COPY | --- ## 规则 1. **工具**:用 ora2pg 从 Oracle 导出 → PG 导入 2. **主源**:所有表优先从 **SLAJ** schema 取 3. **跳过**: - 51 张无 DDL 的表(如 T_SYS_USER、DESU_ROLE 等,表结构待补充) - ATT_MED_BASE(1680万行附件表,最后单独处理) 4. **去重**:多源同名表,**列数相同的只迁 SLAJ 一份**;列数不同的才需要合并 --- ## 需要合并的表(仅 4 张) 这 4 张表在多个 schema 里列数不同,需从各源取出后按 GUID 去重合并: | 表名 | 数据源(按列数排序) | 合并优先级 | |------|---------------------|-----------| | OBJ_HAZ | SLAJ(46列) > SLAJ_UPDATE(33列) > SLAJ_PERSTEST(31列) | 以 SLAJ 为准,其他 GUID 不存在时补充 | | OBJ_HIDD | SLAJ_ROHS(32列) > SLAJ(32列) > SLAJ_PERSTEST(30列) | 列数相同,直接取 SLAJ | | OBJ_ACCI | SLAJ_ROHS(30列) > SLAJ(28列) > SLAJ_PERSTEST(25列) | 以 SLAJ_ROHS 为准 | | BIS_HIDD_RECT_ACCE | SLAJ_ROHS(16列) > SLAJ(15列) > SLAJ_PERSTEST(12列) | 以 SLAJ_ROHS 为准 | 合并 SQL 模板: ```sql -- 从多个源合并,按 GUID 去重 INSERT INTO slaj.obj_haz SELECT DISTINCT ON (guid) * FROM ( SELECT * FROM oracle_fdw.SLAJ.OBJ_HAZ UNION ALL SELECT * FROM oracle_fdw.SLAJ_UPDATE.OBJ_HAZ -- 结构不同,补缺失列 ) t; ``` --- ## 执行顺序 | 批次 | 内容 | 表数 | |------|------|------| | 1 | 基础主数据:ATT_ORG_BASE、ATT_PERS_BASE、ATT_AD_BASE | ~20 | | 2 | 工程对象:ATT_ENG_*、OBJ_ENG、OBJ_HAZ、OBJ_HIDD 等 | ~40 | | 3 | 业务表:BIS_*、REL_* | ~80 | | 4 | 系统配置:SYS_*、COLL_*、IWHR_* | ~10 | | 5 | 合并那 4 张重复表 | 4 | | — | 后续补充:51 张无 DDL 表 | — | | — | 最后:ATT_MED_BASE | 1 | --- ## DDL 脚本 已在瀚高 `slaj` schema 建好 153 张表,全部空表,结构就绪。 如需重新建表: ```bash psql -h 192.168.0.149 -p 5866 -U highgo -d highgo -f migration/output/schemas/slaj/all.sql ``` 完整表清单和每张表的源 schema 见 `migration/output/table-final.json`。