一、支持版本
目前数据集成已支持 PostgreSQL 单表及整库级实时读取和写入,使用实时同步能力需遵循以下版本限制:
| 类型 | 版本 |
| PostgreSQL | 9.6及以上版本 |
二、使用限制
·增量日志保留时长至少3天,如果全量阶段数据量很大,请延长增量日志保留时长。
·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 ,否则需要superuser权限
CREATE PUBLICATION dbz_publication FOR ALL TABLES;
四、实时整库同步来源配置
| 参数 | 说明 |
| 数据来源 | 选择需要同步的 PostgreSQL数据源。 |
| 来源表 | PostgreSQL 只支持指定表和指定库,不支持所有库表:指定表:此选项下需指定到具体表名称,设置后任务仅同步指定表,只能选择一个库下的表,不支持跨库选择;若需要新增同步表需暂停并重启任务。指定库:此选项下需指定具体库名、表名正则表达式。其中库名必须要相同,不支持多个数据库。设置后,任务运行期间符合表名表达式的新增表默认将同步至目标端。 |
| 读取模式 | 全量 + 增量:数据同步分为全量和增量同步阶段,全量阶段完成后任务进入增量阶段。全量阶段将同步库内历史数据,增量阶段从任务启动后 binlog cdc 的位点开始同步。增量:仅从任务启动后的 binlog cdc 位点开始同步数据。 |
| 时区 | 设置日志时间所属时区,默认上海。 |
| 过滤操作 | 支持插入、更新和删除三种操作,设置后将不同步指定操作类型的数据。 |
| 一致性语义 | 仅代表读取端的一致性语义。支持 At-least-once 和 Exactly-once。At-least-once:数据可能存在重复读取,依赖目标端支持去重来保证数据的一致性。适用于全量阶段数据量大且使用非数值型主键、对同步性能要求高的场景。 Exactly-once:数据严格只读取一次,性能上有一定损失,不支持无主键且无唯一索引列的表。适用于源表有数值型主键或唯一索引列的通用场景。当前版本两种模式状态不兼容,任务提交后如果修改模式,不支持带状态重启。 |
| 高级设置(可选) | 可根据业务需求配置参数。 |
五、实时整库同步写入配置
| 参数 | 说明 |
| 数据去向 | 选择需要同步的 PostgreSQL 目标数据源。 |
| 写入模式 | Upsert:更新方式写入目标表。此方式下要求目标表中已设置主键。任务将默认使用主键作为唯一键进行记录更新。若表无主键则 Append 写入。Append:追加模式写入数据表。 |
| 库/Schema/表匹配策略 | 默认与来源库/表同名,也可以自定义配置,输入匹配规则即可(鼠标放至“查看内置参数”即可查看匹配规则)。PostgreSQL 目标端暂不支持自动建库/Schema/表能力,仅支持同步至已有库、已有 Schema、已有表中,任务运行前需保证目标表已存在。 |
六、实时分库分表来源配置
参见 分库分表配置。
七、实时单表同步读取配置
1. 在数据集成页面左侧目录栏单击实时同步。
2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。
| 参数 | 描述 |
| 数据来源 | 选择需要同步的表所在数据源。 |
| 库 | 支持选择、或者手动输入需读取的库名称。默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。当数据源网络不连通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。 |
| Schema | 支持选择、或者手动输入需读取该数据源下可用的模式。 |
| 表 | 支持选择、或者手动输入需读取的表名称。 |
| 读取模式 | 全量 + 增量:数据同步分为全量和增量同步阶段,全量阶段完成后任务进入增量阶段。全量阶段将同步库内历史数据,增量阶段从任务启动后 binlog cdc 的位点开始同步。仅增量:仅从任务启动后的 binlog cdc 位点开始同步数据。 |
| 高级设置(选填) | 可根据业务需求配置参数。 |
八、实时单表同步写入配置
1. 在数据集成页面左侧目录栏单击实时同步。
2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。
| 参数 | 描述 |
| 数据去向 | 选择需要写入的表所在数据源。 |
| 库 | 支持选择、或者手动输入需写入的库名称。默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。当数据源网络不连通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。 |
| Schema | 支持选择或者手动输入需写入该数据源下可用的模式。 |
| 表 | 支持选择或者手动输入需写入的表名称。 |
| 主键 | 选择一个字段作为写入表的主键。 |
| 高级设置(选填) | 可根据业务需求配置参数。 |
九、读取
PostgreSQL 读取支持的数据类型及转换对应关系如下:
| PostgreSQL 类型 | 内部类型 |
| – | TINYINT |
| SMALLINT,INT2,SMALLSERIAL,SERIAL2 | SMALLINT |
| INTEGER,SERIAL | INT |
| BIGINT,BIGSERIAL | 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 |