You need to enable JavaScript to run this app.
导航

使用限制(源库为 PostgreSQL)

最近更新时间2024.02.01 16:26:13

首次发布时间2021.11.23 10:18:01

本文介绍当迁移的目标库类型为 PostgreSQL(如火山引擎版 PostgreSQL 或自建 PostgreSQL)时,支持的数据库以及使用限制详情。

支持的数据库

源库
目标库
支持版本
迁移类型
  • 火山引擎版 PostgreSQL
  • 火山引擎 ECS 自建 PostgreSQL
  • 公网自建 PostgreSQL
  • 火山引擎专有网络 PostgreSQL
  • 火山引擎版 PostgreSQL
  • 火山引擎 ECS 自建 PostgreSQL
  • 公网自建 PostgreSQL
  • 火山引擎专有网络 PostgreSQL
  • PostgreSQL 10
  • PostgreSQL 11
  • PostgreSQL 12
  • 结构迁移
  • 全量迁移
  • 增量迁移

使用限制

类型说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

  • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标库中出现重复数据。

  • 建议单任务表数量不超过 2 万,库数量不超过 50。如果有大批量表需要迁移,建议拆分成多个任务。

  • 如需进行增量迁移:

    • 需开启 WAL 日志,即设置 wal_level 参数的值为 logical

    • 建议在全量迁移期间,WAL 日志至少保留 7 天以上。或者等到全量迁移完成后,再清理 DTS 任务运行后源库产生的数据日志。

  • 用于数据迁移的账号需具备以下权限:

    • 源库账号需要具有 superuser 权限,以便于创建逻辑复制槽。

    • 目标库账号需要具有创建 schema 权限,如果目标库 schema 已存在,则迁移账号需要具备目标 schema 的 owner 权限。

  • 源库的操作限制如下:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的 DDL 操作,否则数据迁移任务会失败。

    • 如仅执行全量数据迁移,请勿向源库中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

其他限制

  • 单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。

  • 增量数据迁移期间,如果迁移对象的选择粒度为 schema,在待迁移的 schema 中创建了新的表或使用 RENAME 命令重建了待迁移的表,您需要在对该表写入数据前执行 ALTER TABLE <schema.table> REPLICA IDENTITY FULL; 命令。

    说明

    执行时将上述命令中的 schematable 替换成真实的 schema 名和表名。

  • 增量数据迁移期间,DTS 会在源库中创建前缀为 dts_sync_ 的 replication slot 用于复制数据。DTS 会每隔 5~10 分钟自动清理一次历史 replication slot,避免其持续累积占用磁盘空间。

    说明

    • 当释放迁移任务或迁移失败时,DTS 会主动清理该 replication slot。

    • 如果火山引擎版 PostgreSQL 发生了主备切换,则需要您登录备库来手动清理。

  • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时 DTS 占用源和目标库一定读写资源,可能会导致数据库的负载上升。

  • 由于全量数据迁移会并发执行 INSERT 操作,导致目标库的表产生碎片,因此全量迁移完成后目标库的表存储空间会比源库的表存储空间大。

  • 迁移前请确认源库和目标库字符串是否一致,否则可能会导致预检查失败。

特殊情况

  • 当源库为自建 PostgreSQL,在执行迁移任务时,请勿对源库进行主备切换操作,否则将导致迁移任务失败。在迁移时如果源库执行了重启操作,迁移任务会暂时中断并自动尝试修复。如果任务长时间没恢复,请提交工单联系技术支持。

  • 当您想跨账号迁移 PostgreSQL 且需要进行增量迁移时,建议在源端实例所属的账号下发起迁移任务,目标端可通过公网自建的形式完成任务迁移。

  • 若源库是阿里云 PolarDB PostgreSQL,且目标库是火山引擎 PostgreSQL,在配置迁移任务时,请确保您使用的是 PolarDB PostgreSQL 的主地址而不是集群地址,否则会由于无法建立逻辑复制槽导致迁移失败。