实时数仓入仓:用 NineData 完成 PostgreSQL 到 SelectDB 同步

举报
智能数据 发表于 2026/11/12 16:47:18 2026/11/12
【摘要】 使用 NineData 完成了 PostgreSQL 到 SelectDB 的结构、全量和增量复制配置,并验证了对增删改与 DDL 变更的实时同步能力。相比手工导出导入,NineData 将建表映射、模型转换、增量同步与一致性校验整合在一条可视化链路中,大幅降低 PostgreSQL 到 SelectDB 迁移的门槛与风险。如果你正在规划 PostgreSQL 到 SelectDB 的数据迁移,不

SelectDB(兼容 Doris 协议)凭借高性能的实时 OLAP 能力,越来越多地被用作 PostgreSQL 业务数据的分析引擎。如何把 PostgreSQL 中的存量与增量数据稳定、持续地同步到 SelectDB?本文基于 NineData 数据复制功能的真实录屏演示,手把手带你完成从创建复制任务、选择复制对象、配置映射、预检查,到启动后查看结构复制、全量复制、增量复制,以及验证增量变更与 DDL 同步结果的全过程,并整理了 PostgreSQL 到 SelectDB 的前置条件、参数配置与常见问题,照着做即可完成一次完整的 PostgreSQL 到 SelectDB 数据迁移同步。

一、NineData PostgreSQL 到 SelectDB 数据复制能力概览

NineData 数据复制支持 PostgreSQL 到 SelectDB 之间的结构复制、全量数据同步和增量数据同步,可按需组合三种复制类型:

• 结构复制:将 PostgreSQL 的库表结构转换为 SelectDB 建表语句并在目标端执行,不同步数据;

• 全量复制:同步源数据源的所有对象与存量数据,通过智能数据分片实现行级并发批量复制,完成全量数据初始化;

• 增量复制:全量完成后基于 PostgreSQL 的 WAL 日志(逻辑解码)持续同步增量变更,覆盖 INSERT/UPDATE/DELETE 与 DDL。

NineData 会按源表的主键、唯一键情况自动为 SelectDB 选择合适的表模型并定义 Key 与分桶键(Distribute Key),无需手工编写建表与映射代码。

二、前提条件与使用限制

前提条件

• 已将源数据源(PostgreSQL)和目标数据源(SelectDB)添加至 NineData,目标端无同名库表;

• 源端 PostgreSQL 需将 wal_level 参数设置为 logical,开启逻辑解码能力;

• 预留足够的 max_wal_senders 与 max_replication_slots 数量,保障增量复制通道稳定;

• 源端账号需具备待复制对象及其元数据的读取权限(CONNECT、REPLICATION、SELECT 等);

• 目标端 SelectDB 账号需具备建库建表与写入(DML/DDL)权限。

使用限制

• PostgreSQL 与 SelectDB 的对象、字段和数据类型存在差异,启动任务前请在映射配置和预检查结果中确认目标库、目标表、Key 及字段映射符合预期;

• 源端库表名称需符合 SelectDB 命名规则:以字母开头,可包含字母、数字和下划线,不能包含空格或其他特殊字符;

• 为保障复制一致性,建议同步表尽量具备主键或唯一约束;

• 全量初始化会占用源端与目标端一定的读写资源,建议在业务低峰期执行,并提前评估两端数据库性能;

• 增量阶段可查看各类型事件计数与 DDL 回放详情,确认结构变更已在目标端按相同语义完成。

三、创建 PostgreSQL 到 SelectDB 的数据复制任务(5 步)

步骤 1:配置数据源与目标

登录 NineData 控制台,在左侧导航栏单击数据复制 > 数据复制,单击右上角创建复制。在数据源与目标页签:填写便于识别的任务名称(最多 64 个字符);源数据源选择已接入的 PostgreSQL 实例,目标数据源选择 SelectDB 数据源;复制类型同时勾选结构复制、全量复制和增量复制,覆盖完整迁移流程;复制规格按需选择,目标库同名对象处理策略保持默认。确认无误后单击下一步。

步骤 2:选择复制对象

在选择复制对象页签,可以选择全部实例复制源库所有内容,也可以选择自定义对象,在源对象列表中勾选需要同步的库和表,单击添加加入右侧目标对象列表,目标端对象自动按同名映射,仔细核对迁移范围。本次演示选择了源库中的 7 张业务表。

步骤 3:配置映射(目标库表、主键与分桶键)

在配置映射页签,源表与目标表默认一一对应,可确认字段级映射以及主键、分桶键(Distribute Key)的设置——NineData 会依据源表键定义自动为 SelectDB 选择合适表模型并推导 Key。如需调整列名或增加数据过滤条件,也可打开映射与过滤进行配置。核对无误后,单击保存并预检查。

步骤 4:预检查

预检查会自动核对连接、权限、参数与命名规范等配置项,重点包括:源端 wal_level 是否为 logical、max_wal_senders 与 max_replication_slots 是否预留充足、无主键表提示、循环链路检测、库名表名是否符合 SelectDB 命名规范、只读检查以及数据一致性对比等。预检查未通过时,单击检查项右侧操作列的详情,排查失败原因并修复后单击重新检查。本次演示全部检查项一次性通过。

步骤 5:启动任务

预检查通过后任务自动进入启动流程,页面提示启动成功并展示任务 ID 与任务名称。单击查看详情进入任务详情页,即可查看结构复制、全量复制、增量复制各阶段的执行情况。

四、查看同步结果:结构、全量、增量复制与 DDL 变更同步

结构复制

在结构复制页签查看目标对象的创建结果,列表展示源/目标库、源/目标对象、开始与结束时间及状态;结构复制将 PostgreSQL 表结构转换为 SelectDB 建表语句并在目标端执行,本次演示的 7 张表很快全部变为已完成。单击操作列的查看 DDL,可以查看生成的建表语句详情,目标端结构与源端保持一致。

全量复制

切换到全量复制页签,检查表级状态、完成进度和数据量;全量复制将存量数据全部写入目标端,过程中可单击监控查看各项监控指标,并通过限流设置限制每秒写入目标端的速率(行/秒)。全量复制完成后,任务自动进入增量复制阶段。

增量复制

在增量复制页签,可查看操作计数与读取延迟、复制延迟的监控曲线。此时源端还没有产生变更,各项计数为零;一旦源端产生数据变更,链路会自动将其同步到目标端,全程无需人工干预。

增量变更与 DDL 同步结果

源端产生增量变更后,单击查看 DDL 可以打开增量复制 DDL 详情,查看每条 DDL 的回放详情:源端执行的 ALTER TABLE 语句(本次演示包含加列与改列名),已在目标端 SelectDB 按相同语义完成,两端结构保持一致。

操作计数实时更新,INSERT、DELETE、UPDATE 与 DDL 变更均已同步,复制延迟稳定为零秒,同步链路保持稳定运行;后续源端的任何变更都会持续实时同步到目标端。

五、常见问题(FAQ)

Q1:PostgreSQL 同步到 SelectDB 支持哪些复制类型?

支持结构复制、全量复制和增量复制三种类型,可单独或组合使用。生产迁移建议同时勾选三种:结构复制完成建表,全量复制完成存量初始化,增量复制基于 WAL 日志持续同步变更,实现平滑迁移。

Q2:源端 PostgreSQL 需要做哪些配置?

需要将 wal_level 参数设置为 logical 开启逻辑解码,并预留足够的 max_wal_senders 与 max_replication_slots 数量;调整后需重启实例生效。否则预检查会失败,增量同步无法建立复制通道。

Q3:源端账号需要哪些权限?

需要具备待复制对象及其元数据的读取权限(如 CONNECT、REPLICATION、SELECT 等),具体以任务预检查结果为准。

Q4:目标端存在同名表或存量数据怎么办?

在数据源与目标页签的目标库同名对象处理策略中选择:预检查报错并停止任务、跳过并继续任务或删除对象并重建。执行删除重建前务必确认目标数据可以处理,避免误删。

Q5:预检查失败如何处理?

在预检查页签单击失败项右侧的详情,查看具体原因(常见如 wal_level 未设置为 logical、复制槽资源不足、权限不够、库名表名不符合 SelectDB 命名规范等),手动修复后单击重新检查,直至全部通过;警告项可视情况修复或忽略。

Q6:增量延迟为 0 秒意味着什么?

在复制详情页顶部与增量复制页签均可查看同步延迟。延迟为 0 秒表示源端与目标端数据已完全一致,此时可以将业务切换到目标 SelectDB,实现平滑迁移。

结语

通过以上步骤,我们使用 NineData 完成了 PostgreSQL 到 SelectDB 的结构、全量和增量复制配置,并验证了对增删改与 DDL 变更的实时同步能力。相比手工导出导入,NineData 将建表映射、模型转换、增量同步与一致性校验整合在一条可视化链路中,大幅降低 PostgreSQL 到 SelectDB 迁移的门槛与风险。如果你正在规划 PostgreSQL 到 SelectDB 的数据迁移,不妨按本文步骤实际操作一遍。

相关文档:NineData 官方文档《PostgreSQL 迁移同步到 SelectDB》:https://docs.ninedata.cloud/replication/pg_to_others/postgresql_to_selectdb

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。