数据传输
数据传输把一个数据源中的表或集合复制到另一个连接、数据库或 Schema。它适合环境迁移、测试数据准备和一次性数据整合,不是持续复制、CDC 或双向同步方案。
两个入口
数据传输向导
向导适合一次传输多张表。你可以分别选择源和目标连接、Catalog、数据库和 Schema,再配置建表、写入模式、目标表名大小写和批大小。
侧边栏复制与粘贴
在对象树中复制一张或多张表后,可以粘贴到目标位置:
- 同一上下文中可选择“结构和数据”“仅结构”或“仅数据”,并逐表修改目标名称
- 粘贴到另一个连接、数据库或 Schema 时,DBX 会自动打开数据传输向导并带入源表和目标位置
- 表数据复制会跳过生成列或计算列,并对 PostgreSQL identity、SQL Server identity 等路径应用相应写入处理
向导流程
选择源位置
选择源连接、Catalog(如适用)、数据库和 Schema。DBX 只列出可传输的基础表;MongoDB 路径列出集合。
选择目标位置
选择另一个连接、数据库或 Schema。源和目标不能是完全相同的位置。
选择表
可以全选、搜索或只选择部分表。一次请求中的表必须来自同一个源位置。
配置传输选项
确认是否创建目标表、写入模式、目标表名大小写和批大小。
后台执行并检查结果
对话框关闭后任务继续运行。进度中心显示当前表、表序号、行数、耗时、失败表和取消状态。
传输选项
| 选项 | 说明 |
|---|---|
| 创建目标表 | 目标表不存在时,根据源元数据和目标数据库能力生成表结构 |
| 追加 | 保留目标表已有数据并插入源数据 |
| 覆盖 | 在传输该表前清空目标表,再写入源数据 |
| Upsert | 目标路径支持且能确定键时,按键更新或插入 |
| 表名大小写 | 保持原样、转小写或转大写;转换后的目标名必须互不冲突 |
| 批大小 | 控制分页读取和分批写入,默认 1000,可在界面中调整 |
如果关闭“创建目标表”,目标表必须已经存在且字段可兼容。即使开启建表,跨引擎 DDL 也可能因目标数据库不支持某些类型、默认值、约束或对象而需要人工调整。
PostgreSQL 结构和所有者
PostgreSQL 到 PostgreSQL 且启用创建表时,DBX 会在能力允许时处理序列、索引、外键以及部分 Schema 级对象和依赖。若源对象所有者在目标实例中不存在,开始前会提示选择:
- 跳过相关所有者信息
- 把缺失所有者重新分配为目标当前用户
- 取消并先在目标实例创建所需角色
这不等价于完整的 pg_dump / pg_restore。扩展、权限、策略、触发器或依赖复杂时,仍应使用 PostgreSQL 原生迁移工具验证。
失败处理
多表任务不会因为第一张表失败就立即丢弃整个队列。DBX 会记录该表的错误并继续尝试后续表,最后以成功或带失败的终态结束。
- 进度中保存每张失败表及错误摘要
- 失败数量较多时,界面只展示有限条目并报告被省略的数量
- 同一目标表已有传输任务运行时,新任务会被阻止,避免并发覆盖
- 取消会停止后续读取和写入,但已提交的数据不会自动撤销
因此“任务完成”不代表所有表都成功;应检查最终状态、失败列表、目标行数和关键字段。
数据库覆盖范围
DBX 按驱动能力清单过滤源和目标连接。当前实现同时包含 SQL 到 SQL、MongoDB 到 MongoDB,以及部分 MongoDB 与 SQL 之间的转换路径;并非所有已支持连接都提供数据传输。
不同组合的能力也不完全相同,例如:
- 某些引擎只能传输表数据,不能复用源 DDL
- Upsert 依赖目标数据库和可识别的键
- Catalog、Schema、identity、数组、JSON 和二进制值的处理因引擎而异
- 专用搜索、向量、消息队列和配置中心连接不使用此通用表传输入口
如果连接未出现在下拉列表中,表示当前驱动没有声明数据传输能力,而不是仅仅缺少 UI 入口。
传输前检查
- 目标连接是否开启只读保护;只读目标会被直接阻止
- 源和目标账号是否分别具有读取、建表和写入权限
- 目标表名大小写转换后是否冲突
- 主键、唯一约束、外键、触发器和非空字段是否会拒绝数据
- 从生产环境复制到低环境前是否需要脱敏
- 大表是否更适合数据库原生导出、导入或在线迁移工具