PostgreSQL 数据源

最近更新时间:2024-09-04 20:44:31

我的收藏
数据集成提供了 PostgreSQL 的读取和写入能力,本文为您介绍使用 PostgreSQL 进行实时数据同步的前置环境配置以及当前能力支持情况。

支持版本

目前数据集成已支持 PostgreSQL 单表及整库级实时读取和写入,使用实时同步能力需遵循以下版本限制:
类型
版本
PostgreSQL
9.6及以上版本

使用限制

PostgreSQL 一个数据源只能对应一个数据库,所以一个实时整库任务只支持同步一个数据库下的表,不支持跨库选择表。
无主键的表由于无法保证 exactly once 可能会有数据重复,因此实时同步任务最好保证有主键。
PostgreSQL 源端的 Schema 变更依赖有数据传输,Schema 变更后有数据发送时才能感知到 Schema 变更。
PostgreSQL 源端的重命名列会被识别为删除列和新增列
PostgreSQL 源端删除表、清空表操作无法同步到目标端,默认忽略此类变更。

数据库环境准备

1. 修改 postgres.conf,开启 wal:
wal_level = logical
2. 对于需要同步的表,开启全量复制:
ALTER TABLE <table> REPLICA IDENTITY FULL
3. 需要的权限:(my_开头的需要替换成真实的库、schema、表、用户名)
GRANT CONNECT ON DATABASE my_db TO my_user;
GRANT USAGE ON SCHEMA my_schema TO my_user;
GRANT SELECT ON ALL TABLES IN SCHEMA my_schema TO my_user;
ALTER USER my_user REPLICATION;
GRANT CREATE ON DATABASE my_db TO my_user;
4. 提前创建名为 dbz_publication 的 pg_publication 可以不使用如下权限:
GRANT CREATE ON DATABASE my_db TO my_user;

整库来源配置

数据来源设置




参数
说明
数据来源
选择需要同步的 PostgreSQL数据源。
来源表
PostgreSQL 只支持指定表和指定库,不支持所有所有库表:
指定表:此选项下需指定到具体表名称,设置后任务仅同步指定表,只能选择一个库下的表,不支持跨库选择;若需要新增同步表需暂停并重启任务。



指定库:此选项下需指定具体库名、表名正则表达式。其中库名必须要相同,不支持多个数据库。设置后,任务运行期间符合表名表达式的新增表默认将同步至目标端。



读取模式
全量 + 增量:数据同步分为全量和增量同步阶段,全量阶段完成后任务进入增量阶段。全量阶段将同步库内历史数据,增量阶段从任务启动后 binlog cdc 的位点开始同步。
增量:仅从任务启动后的 binlog cdc 位点开始同步数据。
时区
设置日志时间所属时区,默认上海。
过滤操作
支持插入、更新和删除三种操作,设置后将不同步指定操作类型的数据。
一致性语义
仅代表读取端的一致性语义。支持 At-least-once 和 Exactly-once。
At-least-once:数据可能存在重复读取,依赖目标端支持去重来保证数据的一致性。适用于全量阶段数据量大且使用非数值型主键、对同步性能要求高的场景。
Exactly-once:数据严格只读取一次,性能上有一定损失,不支持无主键且无唯一索引列的表。适用于源表有数值型主键或唯一索引列的通用场景。
当前版本两种模式状态不兼容,任务提交后如果修改模式,不支持带状态重启。
高级设置(可选)
可根据业务需求配置参数。

支持的目标数据源

当前支持将 PostgreSQL 数据实时整库同步到以下类型的目标端:

整库写入配置




参数
说明
数据去向
选择需要同步的 PostgreSQL 目标数据源。
写入模式
Upsert:更新方式写入目标表。此方式下要求目标表中已设置主键。任务将默认使用主键作为唯一键进行记录更新。
若表无主键则 Append 写入。
Append:追加模式写入数据表。
库/Schema/表匹配策略
默认与来源库/表同名,也可以自定义配置,输入匹配规则即可(鼠标放至“查看内置参数”即可查看匹配规则)。
PostgreSQL 目标端暂不支持自动建库/Schema/表能力,仅支持同步至已有库、已有 Schema、已有表中,任务运行前需保证目标表已存在。
说明:
当前仅支持将 MySQL 类型的数据整库同步到 PostgreSQL。

单表读取节点配置

1. 在数据集成页面左侧目录栏单击实时同步。
2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。



参数
描述
数据来源
选择需要同步的表所在数据源。
支持选择、或者手动输入需读取的库名称。
默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
Schema
支持选择、或者手动输入需读取该数据源下可用的模式。
支持选择、或者手动输入需读取的表名称。
读取模式
全量 + 增量:数据同步分为全量和增量同步阶段,全量阶段完成后任务进入增量阶段。全量阶段将同步库内历史数据,增量阶段从任务启动后 binlog cdc 的位点开始同步。
仅增量:仅从任务启动后的 binlog cdc 位点开始同步数据。
高级设置(选填)
可根据业务需求配置参数。


单表写入节点配置

1. 在数据集成页面左侧目录栏单击实时同步。
2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。



参数
描述
数据去向
选择需要写入的表所在数据源。
支持选择、或者手动输入需写入的库名称。
默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
Schema
支持选择或者手动输入需写入该数据源下可用的模式。
支持选择或者手动输入需写入的表名称。
主键
选择一个字段作为写入表的主键。
高级设置(选填)
可根据业务需求配置参数。

日志采集写入节点配置




参数
说明
数据源
选择当前项目中可用的 PostgreSQL 数据源。
库/表
选择 PostgreSQL 数据源中对应的库表。
模式
选择 PostgreSQL 数据源中的模式。
主键
选择一个字段作为数据表主键
高级设置(可选)
可根据业务需求配置参数。

数据类型转换支持

读取

PostgreSQL 读取支持的数据类型及转换对应关系如下:
PostgreSQL 类型
内部类型
-
TINYINT
SMALLINT,INT2,SMALLSERIAL,SERIAL2
SMALLINT
INTEGER,SERIAL
INT
BIGINT,BGSERIAL
BIGINT
-
DECIMAL(20, 0)
REAL,FLOAT4
FLOAT
FLOAT8,DOUBLE PRECISION
DOUBLE
NUMERIC(p, s),DECIMAL(p, s)
DECIMAL(p, s)
BOOLEAN
BOOLEAN
DATE
DATE
TIME [(p)][WITHOUT TIMEZONE]
TIME [(p)][WITHOUT TIMEZONE]
TIMESTAMP [(p)]WITHOUT TIMEZONE
TIMESTAMP [(p)][WITHOUT TIMEZONE]
CHAR(n),CHARACTER(n),VARCHAR(n),CHARACTER ,VARYING(n),TEXT
STRING
BYTEA
BYTES

写入

PostgreSQL 写入支持的数据类型及转换对应关系如下:
内部类型
PostgreSQL 类型
TINYINT
-
SMALLINT
SMALLINT,INT2,SMALLSERIAL,SERIAL2
INT
INTEGER,SERIAL
BIGINT
BIGINT,BIGSERIAL
DECIMAL(20, 0)
-
FLOAT
REAL,FLOAT4
DOUBLE
FLOAT8,DOUBLE PRECISION
DECIMAL(p, s)
NUMERIC(p, s),DECIMAL(p, s)
BOOLEAN
BOOLEAN
DATE
DATE
TIME [(p)][WITHOUT TIMEZONE]
TIME [(p)][WITHOUT TIMEZONE]
TIMESTAMP [(p)][WITHOUT TIMEZONE]
TIMESTAMP [(p)]WITHOUT TIMEZONE
STRING
CHAR(n),CHARACTER(n),VARCHAR(n),CHARACTER VARYING(n),TEXT
BYTES
BYTEA