有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文为您介绍使用数据传输服务 DTS 从 PostgreSQL 数据库同步数据至腾讯云数据库 PostgreSQL 的过程。
源数据库支持的部署类型如下:
自建 PostgreSQL。
第三方云厂商 PostgreSQL。
腾讯云数据库 PostgreSQL。

前提条件

源数据库和目标数据库符合同步功能和版本要求,请参考 数据同步支持的数据库 进行核对。
执行 DTS 同步任务的账号需要具备源数据库的权限:Event Trigger、Replication、CREATE、DROP、ALTER、SELECT、UPDATE、INSERT、DELETE。
执行 DTS 同步任务的账号需要具备目标数据库的权限:CREATE、DROP、ALTER、SELECT、UPDATE、INSERT、DELETE。

注意事项

DTS 在执行全量数据同步时,会占用一定的源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行操作。
默认采用无锁方式,同步过程中对源库不加全局锁。
数据同步时,DTS 会使用执行同步任务的账号在源库中建立 postgres.public.identify、{database}.__tencentdb__sync_*.* 来记录任务状态、配置信息,目标实例会使用 {database}.__tencentdb__ schema 记录同步状态信息。postgres.public.identify、{database}.__tencentdb__sync_*.*、{database}.__tencentdb__ schema 占用空间非常小,约为源库存储空间的千分之一到万分之一 ,所以对源库的性能无影响,也不会抢占资源。

应用限制

1. 不支持如下对象的同步:ROLE、PROCEDURE、TRIGGER、FUNCTION、RULE 等。
2. 不支持公共对象和权限变更同步。
3. 全量阶段结构初始化不支持外键导入,会自动移除外键约束后导入。
4. 数据同步不支持 FOREIGN TABLE 表类型,全量阶段导出导入不支持 TEMPORARY TABLE,增量同步阶段仅支持 UNLOGGED TABLE 数据结构同步。
5. 当数据同步任务启动前的校验阶段进行插件检测时,检查到第一个不匹配的插件发出告警后,不再继续检测剩余的插件。
6. 因同步任务依赖 max_replication_slots 参数(每个数据库配置同步任务时占用一个 replication_slots),可通过 SQL 语句 select * from pg_replication_slots查看已使用情况,如果已配置同步库数量 + replication_slots > max_replication_slots,新建同步任务会失败,需要用户主动结束任务后系统才会释放replication_slots(失败任务未结束不会释放replication_slots)。
7. 源实例带时区的字段(timestamp with time zone)同步到目标实例后,会自动转为目标实例时区的对应值。
8. 源库发生 HA 等操作导致源实例主节点发生迁移会引起 WAL 日志变化,原同步任务会失败,需要清理目标库已同步的数据,然后重新建立同步任务。
9. 源库在增量阶段对 SEQUENCE 对象更新,同步到目标库后不支持对 SEQUENCE 的 last_value 的刷新,可能需要用户自行检查同步结果,并手动修改目标库上的取值。
10. 源库的对象同步目标端后,对象 owner 会改为目标库账号。例如之前表1的 owner 为 A,目标库使用 B 账号进行同步,则写入到目标库后表1的 owner 改为 B。

操作限制

同步过程中请勿进行如下操作,否则会导致同步任务失败。
请勿修改、删除源数据库和目标数据库中的用户信息(包括用户名、密码和权限)和端口号。
增量同步阶段同时高并发的 DDL 和 DML 操作可能会存在数据冲突,建议减少增量阶段的 DDL。
请勿在源库上执行清除 WAL 的操作。
在同步增量阶段,请勿删除系统库和 schema postgres.public.identify、__tencentdb__sync_*.* 、{database}.__tencentdb__ schema。
源和目标数据库类型为腾讯云数据库时,请勿修改数据库实例的网络,如发生源实例和目标实例网络变更,导致原 VIP 被删除,同步任务失败、或保持运行中状态不变(此时同步已不再工作),这种情况,同步任务无法重试,需要手动结束该任务后重新建立新的同步任务。

支持同步的 SQL 操作

操作类型
SQL 操作语句
DML
INSERT、UPDATE、DELETE
DDL
CREATE DATABASE、DROP DATABASE、ALTER DATABASE、CREATE SCHEMA、DROP SCHEMA、CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE VIEW、DROP VIEW、CREATE INDEX、DROP INDEX、CREATE SEQUENCE、DROP SEQUENCE
说明:
暂不支持 CREATE TABLE 表名 AS SELECT 语句。
暂不支持 Where 条件过滤的 SQL 过滤策略。

同步支持的数据类型

Aclitem、Bit、Bool、Box、Bpchar、Bytea、Char、Cid、Cidr、Circle、Date、Float4、Float8、Inet、Int2、Int4、Int8、Interval、Json、Jsonb、Jsonpath、Line、Lseg、Macaddr、Name、Numeric、Oid、Path、Point、Polygon、Record、Text、Tid、Time、Timestamp、Timestamptz、Unknown、Uuid、Varbit、Varchar、XID、Daterange、Int4range、Int8range、Numrange、Tsrange、Tstzrange、Datemultirange、Int4multirange、Int8multirange、Nummultirange、
Tsmultirange、Tstzmultirange、XML、Money、Time with time zone、Tsvector、Tsquery、pg_lsn、txid_snapshot。

环境要求

类型
环境要求
源数据库要求
源库和目标库网络能够连通。
源库参数要求如下:
wal_level 参数设置为 logical。
源库需满足:待同步库数量 + replication_slots <= max_replication_slots。
源库对象需要设置不区分大小写。
源库中的表必须含有主键或者联合主键。
目标数据库要求
目标库的版本必须大于等于源库的版本。
目标库需要有足够的存储空间,如果初始类型选择“全量数据初始化”,则目标库的空间大小须是源库待同步库表空间的1.2倍以上。
目标库不能有和源库同名的表、视图等同步对象。

操作步骤

1. 登录 数据同步购买页,选择相应配置,单击立即购买
参数
描述
计费模式
支持包年包月和按量计费。
源实例类型
选择 PostgreSQL,购买后不可修改。
源实例地域
选择源实例所在地域,购买后不可修改。
目标实例类型
选择 PostgreSQL,购买后不可修改。
目标实例地域
选择目的实例所在地域,购买后不可修改。
规格
请根据业务诉求选择规格,规格越高,性能越好。详情请参考 计费概述
2. 购买完成后,返回 数据同步列表,可看到刚创建的数据同步任务,刚创建的同步任务需要进行配置后才可以使用。
3. 在数据同步列表,单击操作列的配置,进入配置同步任务页面。

4. 在配置同步任务页面,配置源端实例、账号密码,配置目标端实例、账号和密码,测试连通性后,单击下一步

因源数据库部署形态和接入类型的交叉场景较多,各场景同步操作步骤类似,如下仅提供典型场景的配置示例,其他场景请用户参考配置。
示例一:本地自建数据库通过专线/VPN 方式同步至腾讯云数据库。
设置项
参数
描述
任务设置
任务名称
DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。
运行模式
支持立即执行和定时执行两种模式。
源实例设置
源实例类型
购买时所选择的源实例类型,不可修改。
源实例地域
购买时选择的源实例所在地域,不可修改。
接入类型
请根据您的场景选择,本场景选择“专线接入”或“VPN 接入”,该场景需要 配置 VPN 和 IDC 之间的互通,其他接入类型的准备工作请参考 准备工作概述
公网:源数据库可以通过公网 IP 访问。
云主机自建:源数据库部署在 腾讯云服务器 CVM 上。
专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。
VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。
云数据库:源数据库属于腾讯云数据库实例。
云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。
私有网络专线网关/VPN 网关
专线接入时只支持私有网络专线网关,请确认网关关联网络类型。VPN 网关,请选择通过 VPN 网关接入的 VPN 网关实例。
私有网络
选择私有网络专线网关和 VPN 网关关联的私有网络和子网。
主机地址
源实例访问 IP 地址或域名。
端口
源实例访问端口。
账号
源实例账号,账号权限需要满足要求。
密码
源实例账号的密码。
目标实例设置
目标实例类型
购买时选择的目标实例类型,不可修改。
目标实例地域
购买时选择的目标实例地域,不可修改。
接入类型
根据您的场景选择,本场景选择“云数据库”。
实例 ID
选择目标实例 ID。
账号
目标实例账号,账号权限需要满足要求。
密码
目标实例账号的密码。
示例二:腾讯云数据库同步至腾讯云数据库。
设置项
参数
描述
任务设置
任务名称
DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。
运行模式
支持立即执行和定时执行两种模式。
源实例设置
源实例类型
购买时所选择的源实例类型,不可修改。
源实例地域
购买时选择的源实例所在地域,不可修改。
接入类型
请根据您的场景选择,本场景选择“云数据库”,不同接入类型的准备工作请参考 准备工作概述
公网:源数据库可以通过公网 IP 访问。
云主机自建:源数据库部署在 腾讯云服务器 CVM 上。
专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。
VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。
云数据库:源数据库属于腾讯云数据库实例。
云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。
实例 ID
源实例 ID。
账号
源实例账号,账号权限需要满足要求。
密码
源实例账号的密码。
目标实例设置
目标实例类型
购买时选择的目标实例类型,不可修改。
目标实例地域
购买时选择的目标实例地域,不可修改。
接入类型
根据您的场景选择,本场景选择“云数据库”。
实例 ID
选择目标实例 ID。
账号
目标实例账号,账号权限需要满足要求。
密码
目标实例账号的密码。
示例三:将第三方云厂商 PostgreSQL 通过公网方式同步至腾讯云数据库。
设置项
参数
描述
任务设置
任务名称
DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。
运行模式
支持立即执行和定时执行两种模式。
自动重试
设置后,迁移任务因网络异常等引起的任务临时中断,DTS 将在设置的时间范围内自动重试和恢复任务,不需要用户手动操作。 支持设置的时间范围为5分钟-720分钟。
源实例设置
源实例类型
购买时所选择的源实例类型,不可修改。
源实例地域
购买时选择的源实例所在地域,不可修改。
接入类型
对于第三方云厂商数据库,一般可以选择公网方式,也可以选择 VPN 接入,专线或者云联网的方式,需要根据实际的网络情况选择。
本场景选择“公网”,不同接入类型的准备工作请参考 准备工作概述
公网:源数据库可以通过公网 IP 访问。
云主机自建:源数据库部署在 腾讯云服务器 CVM 上。
专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。
VPN接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。
云数据库:源数据库属于腾讯云数据库实例。
云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。
主机地址
源实例访问 IP 地址或域名。
端口
源实例端口。
账号
源实例账号,账号权限需要满足要求。
密码
源实例账号的密码。
目标实例设置
目标实例类型
购买时选择的目标实例类型,不可修改。
目标实例地域
购买时选择的目标实例地域,不可修改。
接入类型
根据您的场景选择,本场景选择“云数据库”。
实例 ID
选择目标实例 ID。
账号
目标实例账号,账号权限需要满足要求。
密码
目标实例账号的密码。
5. 在设置同步选项和同步对象页面,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
说明:
初始化类型仅选择全量数据初始化,系统默认用户在目标库已经创建了表结构,不会进行表结构同步,也不会校验源库和目标库是否有同名表,所以当用户同时在已存在同名表中选择前置校验并报错,则校验并报错功能不生效。
如果用户在同步过程中确定会对某张表使用 rename 操作(例如将 table A rename 为 table B),则同步对象需要选择 table A 所在的整个库(或者整个实例),不能仅选择 table A,否则 rename 操作后,table B 的数据不会同步到目标库。

设置项
参数
描述
数据初始化选项
初始化类型
结构初始化:同步任务执行时会先将源实例中表结构初始化到目标实例中。
全量数据初始化:同步任务执行时会先将源实例中数据初始化到目标实例中。仅选择全量数据初始化的场景,用户需要提前在目标库创建好表结构。
默认两者都勾上,可根据实际情况取消。
已存在同名表
前置校验并报错:存在同名表则报错,流程不再继续。
忽略并继续执行:全量数据和增量数据直接追加目标实例的表中。
数据同步选项
冲突处理机制
冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。
冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。
冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。
同步操作类型
支持操作:Insert、Update、Delete、DDL。当前不支持 “DDL 自定义”。
同步对象选项
源实例库表对象
选择待同步的对象,支持基础库表、视图。高级对象仅支持 SEQUENCE。
6. 在校验任务页面,完成校验并全部校验项通过后,单击启动任务。 如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。

7. 返回数据同步任务列表,任务开始进入运行中状态。
说明:
选择操作列的更多 > 结束可关闭同步任务,请您确保数据同步完成后再关闭任务。

8. (可选)您可以单击任务名,进入任务详情页,查看任务初始化状态和监控数据。