搜索本产品文档关键词
将PostgreSQL作为源端
所有文档
menu
没有找到结果,请重新输入

数据传输服务 DTS

将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 USERGRANT语法。

3.3 网络配置

将DTS的IP地址加入至自建PostgreSQL的配置文件pg_hba.conf中,并启用复制和套接字连接。

   # Replication Instance
   host all all 10.1.4.56/00 md5
   # Allow replication connections from localhost, by a user with the
   # replication privilege.
   host replication dms 10.1.4.56/00 md5

PostgreSQL的pg_hba.conf配置文件控制客户端身份验证。文件通常存储在数据库集群的数据目录中。

3.4 源端自建PostgreSQL增量迁移准备工作

  1. 安装逻辑流复制插件

    登录自建PostgreSQL所属的服务器,下载wal2json逻辑流复制插件,下载地址如下: https://github.com/eulerto/wal2json 按照官方指导安装wal2json插件。

  2. 修改PostgreSQL相关参数配置

    修改postgresql.conf配置文件中的如下参数:

    1. 将max_replication_slots 设置为大于1的整数, max_replication_slots的值应根据您需要同时运行的任务数进行设置。例如,要同时运行十二个任务,您需要设置至少十二个slot。

      示例:max_replication_slots = 12

    2. 将wal_level 设置为logical,开启wal 逻辑日志。

      示例:wal_level = logical

    3. 将wal_sender_timeout 设置为0,复制连接处于不活跃状态的时间超过wal_sender_timeout 时,会被源端库终止。该参数的默认值为 60 秒,但我们建议您将该参数设置为零,这样会禁用超时机制。

      示例:wal_sender_timeout = 0

    4. 将max_wal_senders 设置为大于10的整数, max_wal_senders 参数用于设置可以运行的并发任务数,建议和max_replication_slots设置的值一致。

      示例:max_wal_senders = 12

  3. 重启PostgreSQL数据库
  4. 将要迁移表的replica identity设置为FULL

    ALTER TABLE TABLENAME REPLICA IDENTITY FULL;

4. 使用PostgreSQL数据库作为源端

使用PostgreSQL数据库作为源端,在任务创建、任务配置、前置检查、任务启动、任务暂停、任务终止的操作流程请参考典型实践文档。 在任务配置参数和对象映射部分与其他数据源有些许不同。

4.1 任务配置参数

peizhirenwu.png

如上图所示。目前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名。

完成对象映射配置后,点击【保存并预检查】,启动任务的前置检查。

peizhirenwu1.png

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
上一篇
将GaiaDB作为源端
下一篇
将Oracle作为源端