将PostgreSQL作为源端
1. 适用场景
本文适用于使用百度智能云数据传输服务DTS(以下简称 DTS), 将自建PostgreSQL中的数据迁移至DTS已经支持的数据目标端的场景。
2. 将PostgreSQL数据库作为DTS源端的限制
- 不支持包含时区类型列的时间戳。
- 增量同步不支持同步关系型数据库的DDL语句。
- 一个数据迁移任务只能对一个数据库进行数据迁移,如果有多个数据库需要迁移,则需要为每个数据库创建数据迁移任务。
- 如果源端数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
- 复制多个同名但名称具有不同大小写的表(例如,table1、TABLE1 和 Table1)会导致无法预测的行为。
- PostgreSQL至PostgreSQL的结构迁移,暂不支持trigger、extension的迁移。
- PostgreSQL至异构数据源的结构迁移,暂仅支持库表结构迁移,不支持函数、视图等其他对象的迁移。
3. 将PostgreSQL数据库作为源端的前置条件
3.1 环境要求
DTS支持将PostgreSQL 9.4 、10.10版本自建数据库作为源端。
3.2 数据库账号权限要求
源端:
| 数据库 | 全量迁移 | 增量迁移 |
|---|---|---|
| 自建PostgreSQL数据库 | 迁移对象的select权限 | superuser |
自建PostgreSQL数据库,数据库账号创建及授权方法请参见CREATE USER和GRANT语法。
3.3 网络配置
将DTS的IP地址加入至自建PostgreSQL的配置文件pg_hba.conf中,并启用复制和套接字连接。
1 # Replication Instance
2 host all all 10.1.4.56/00 md5
3 # Allow replication connections from localhost, by a user with the
4 # replication privilege.
5 host replication dms 10.1.4.56/00 md5
PostgreSQL的pg_hba.conf配置文件控制客户端身份验证。文件通常存储在数据库集群的数据目录中。
3.4 源端自建PostgreSQL增量迁移准备工作
-
安装逻辑流复制插件
登录自建PostgreSQL所属的服务器,下载wal2json逻辑流复制插件,下载地址如下: https://github.com/eulerto/wal2json 按照官方指导安装wal2json插件。
-
修改PostgreSQL相关参数配置
修改postgresql.conf配置文件中的如下参数:
-
将max_replication_slots 设置为大于1的整数, max_replication_slots的值应根据您需要同时运行的任务数进行设置。例如,要同时运行十二个任务,您需要设置至少十二个slot。
示例:
max_replication_slots = 12 -
将wal_level 设置为logical,开启wal 逻辑日志。
示例:
wal_level = logical -
将wal_sender_timeout 设置为0,复制连接处于不活跃状态的时间超过wal_sender_timeout 时,会被源端库终止。该参数的默认值为 60 秒,但我们建议您将该参数设置为零,这样会禁用超时机制。
示例:
wal_sender_timeout = 0 -
将max_wal_senders 设置为大于10的整数, max_wal_senders 参数用于设置可以运行的并发任务数,建议和max_replication_slots设置的值一致。
示例:
max_wal_senders = 12
-
- 重启PostgreSQL数据库
-
将要迁移表的replica identity设置为FULL
Plain Text1ALTER TABLE TABLENAME REPLICA IDENTITY FULL;
4. 使用PostgreSQL数据库作为源端
使用PostgreSQL数据库作为源端,在任务创建、任务配置、前置检查、任务启动、任务暂停、任务终止的操作流程请参考典型实践文档。 在任务配置参数和对象映射部分与其他数据源有些许不同。
4.1 任务配置参数

如上图所示。目前DTS的源端支持公网自建PostgreSQL实例,PostgreSQL源端配置参数说明如下:
- 接入类型:支持公网/BCC/BBC/DCC自建PostgreSQL实例。
- 数据类型:固定选择PostgreSQL。
- IP/端口:自建PostgreSQL数据库的访问IP与服务端口。
- 数据库:自建PostgreSQL数据库中待迁移的数据库名。
- 账号:自建PostgreSQL的数据库账号。
- 密码:该数据库账号对应的密码。
注意:当接入类型为 云数据库 RDS 时,仅需选择目标实例,无需填写连接信息及账号密码。
4.2 对象映射
PostgreSQL为三级schema,当需要向两级schema的目的端进行数据迁移时, DTS提供了两种库表名映射方式供用户选择。如下图所示,选择好的迁移对象会出现在右边的已选择对象列表中。DTS支持上下游库表名映射、列过滤黑白名单等功能。可以点击【编辑】,对每一个迁移对象配置映射和过滤规则。目标数据库对象可以映射为源库中database和schema:
- 1. 数据库对象映射为源库中的Database: 忽略PostgreSQL中的schema, PostgreSQL中不同schema下的表均映射到mysql指定库中,目标端库名默认使用源端的库名。
- 2. 数据库对象映射为源库中的Schema: 忽略PostgreSQL中的库名,PostgreSQL中不同schema映射为mysql中不同库,目标库名默认使用源端schema名。
完成对象映射配置后,点击【保存并预检查】,启动任务的前置检查。

5. DTS支持的PostgreSQL源端数据类型
下表列出了使用DTS时支持的PostgreSQL源端数据类型以及与DTS数据类型的默认映射。
有关如何查看目标端映射的数据类型的信息,请参阅有关目标端数据源的数据类型映射部分。
| PostgreSQL数据类型 | DTS字段类型 |
|---|---|
| INTEGER | DTS_TYPE_INT4 |
| INTEGER[] | DTS_TYPE_STRING |
| TEXT[] | DTS_TYPE_STRING |
| BIT | DTS_TYPE_BYTES |
| BIT VARYING | DTS_TYPE_BYTES |
| MONEY | DTS_TYPE_NUMBER |
| CHARACTER | DTS_TYPE_STRING |
| CHARACTER VARYING | DTS_TYPE_STRING |
| TEXT | DTS_TYPE_STRING |
| BYTEA | DTS_TYPE_BYTES |
| COMPLEX | DTS_TYPE_STRING |
| ENUM | DTS_TYPE_STRING |
| CIDR | DTS_TYPE_STRING |
| POINT | DTS_TYPE_STRING |
| LINE | DTS_TYPE_STRING |
| LSEG | DTS_TYPE_STRING |
| BOX | DTS_TYPE_STRING |
| PATH | DTS_TYPE_STRING |
| POLYGON | DTS_TYPE_STRING |
| CIRCLE | DTS_TYPE_STRING |
| INET | DTS_TYPE_STRING |
| MACADDR | DTS_TYPE_STRING |
| MACADDR8 | DTS_TYPE_STRING |
| JSON | DTS_TYPE_STRING |
| SMALLINT | DTS_TYPE_INT2 |
| BIGINT | DTS_TYPE_INT8 |
| NUMERIC(P,S) | 如果精度介于 0 和 38 之间,则使用 DTS_TYPE_NUMBER, 如果精度为 39 或更大的值,则使用 DTS_TYPE_STRING |
| DECIMAL(P,S) | 如果精度介于 0 和 38 之间,则使用 DTS_TYPE_NUMBER, 如果精度为 39 或更大的值,则使用 DTS_TYPE_STRING |
| DECIMAL | DTS_TYPE_STRING |
| NUMBER | DTS_TYPE_STRING |
| DECIMAL(p) | DTS_TYPE_NUMBER |
| NUMBER(p) | DTS_TYPE_NUMBER |
| REAL | DTS_TYPE_FLOAT |
| DOUBLE PRECISION | DTS_TYPE_DOUBLE |
| SMALLSERIAL | DTS_TYPE_INT2 |
| SERIAL | DTS_TYPE_INT4 |
| BIGSERIAL | DTS_TYPE_INT8 |
| TIME WITHOUT TIME ZONE | DTS_TYPE_TIME |
| DATE | DTS_TYPE_DATE |
| TIMESTAMP WITHOUT TIMEZONE | DTS_TYPE_DATETIME |
| INTERVAL | DTS_TYPE_STRING |
| BOOLEAN | DTS_TYPE_BOOLEAN |
