You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件

大数据研发治理套件

复制全文
下载 pdf
PostgreSQL
配置 PostgreSQL 数据源
复制全文
下载 pdf
配置 PostgreSQL 数据源

PostgreSQL 数据源为您提供读取和写入 PostgreSQL 的双向通道数据集成能力,实现不同数据源与 PostgreSQL 之间进行数据传输。本文为您介绍 DataSail 的 PostgreSQL 数据同步的能力支持情况。

1 支持的 PostgreSQL 版本

PostgreSQL 离线读写目前支持以下两种版本:

  • 火山引擎云数据库 PostgreSQL 版;
  • 自建 PostgreSQL 10、11、12、13、14。

您可以在数据库中执行以下语句,查看 PostgreSQL 数据库的版本:

show server_version

2 使用前提

2.1 账号与权限

子账号新建数据源时,需要有项目的管理员角色,方可以进行新建数据源操作。各角色对应权限说明,详见管理成员。对账号及其相关权限的要求如下:

  • 建议创建专用同步账号
    为保障安全性和可追溯性,建议为数据集成任务创建一个专用的 PostgreSQL 账号,避免使用业务账号或高权限账号进行数据同步。创建用户 SQL 示例如下:

    -- 创建 DataSail 专用同步用户
    CREATE USER datasail_user PASSWORD 'your_password';
    
  • 离线读 PostgreSQL 数据时,配置的账号需拥有同步表所在 Schema 的读权限。授权 SQL 示例如下:

    -- 授予指定 Schema 的使用权限
    GRANT USAGE ON SCHEMA "public" TO datasail_user;
    
    -- 授予指定 Schema 下所有表的读权限
    GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO datasail_user;
    
    -- 【推荐】确保未来新建的表也自动授予读权限
    ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO datasail_user;
    

    说明

    如需授权其他 Schema(非 public),请将上述语句中的 "public" 替换为对应的 Schema 名称。如需授权多个 Schema,请对每个 Schema 分别执行上述命令。

  • 离线写 PostgreSQL 数据时,配置的账号需拥有同步表的写(INSERT、DELETE、UPDATE)权限。

    • 授权 SQL 示例

      GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "public" TO datasail_user;
      
      -- 【推荐】确保未来新建的表也自动授予写权限
      ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT INSERT, UPDATE, DELETE ON TABLES TO datasail_user;
      
    • 限制特定表的访问(可选)
      如果您希望仅同步部分表,可以精细化控制权限:

      -- 先撤销 Schema 级别的默认权限
      ALTER DEFAULT PRIVILEGES IN SCHEMA "your_schema" REVOKE SELECT ON TABLES FROM datasail_user;
      REVOKE SELECT ON ALL TABLES IN SCHEMA "your_schema" FROM datasail_user;
      
      -- 再单独授权指定表
      GRANT SELECT ON "your_schema"."your_table" TO datasail_user;
      
  • 数据同步解决方案(实时 WAL 读取) 使用 PostgreSQL 数据源配置实时方案时,需要配置的账号具备 SuperUserreplication 角色权限,两者区别如下:

    • SuperUser 权限(推荐用于快速配置)
      PostgreSQL 实时整库解决方案执行时,需要拥有 SuperUser 权限的用户来创建 publication。

      -- 查看当前用户账号是否有 SuperUser 权限,返回 False 则表示无权限
      SELECT usesuper FROM pg_user WHERE usename = 'datasail_user';
      
      -- 若当前账号无高权限,则需请拥有高权限的账号授予 SuperUser
      ALTER USER datasail_user WITH SUPERUSER;
      
    • replication 权限(推荐用于最小权限原则)
      如果不希望授予 SuperUser 权限,可以使用 replication 权限配合手动创建 publication 的方式:

      -- 检查账号是否有 replication 权限,预期返回 True
      SELECT userepl FROM pg_user WHERE usename = 'datasail_user';
      
      -- 若无 replication 权限,执行以下语句授权
      ALTER USER datasail_user REPLICATION;
      

      如果使用 replication 权限(非 SuperUser),需要由具有高权限的账号手动创建 publication:

      -- 默认订阅全部表,支持新增表自动添加
      CREATE PUBLICATION dbz_publication FOR ALL TABLES;
      
      -- 或者仅指定部分表
      CREATE PUBLICATION dbz_publication FOR TABLE table1, table2, table3;
      

    说明

    • publication 名称需唯一,不能以数字开头。
    • 若使用 FOR ALL TABLES,后续无法通过 ALTER PUBLICATION ... DROP TABLE 移除单表。
    • 若使用 FOR TABLE ...,可以后续通过以下命令添加或移除表:
      ALTER PUBLICATION dbz_publication ADD TABLE new_table;
      ALTER PUBLICATION dbz_publication DROP TABLE old_table;
      

2.2 WAL 服务端配置(实时同步必读)

注意

如果您需要使用实时同步(解决方案中的 WAL 日志读取),必须在 PostgreSQL 服务端完成以下配置。配置不正确会导致实时同步任务启动失败或数据丢失。

  1. 第一步:设置 wal_level 为 logical
    在 PostgreSQL 配置文件(postgresql.conf)中,设置以下参数:

    # 【必须】开启逻辑复制
    wal_level = logical
    
    # 【推荐】设置最大复制槽数量,需大于等于使用逻辑复制的连接器数量 + 其他复制槽数量
    max_replication_slots = 10
    
    # 【推荐】设置最大 WAL 发送进程数,建议至少为复制槽总数的 2 倍
    max_wal_senders = 20
    
    # 【推荐】禁用 WAL 发送超时,避免长时间同步时连接中断
    wal_sender_timeout = 0
    
    # 【推荐】确保 statement_timeout 为 0(默认值)或大于 5 分钟
    # statement_timeout = 0
    

    注意

    • 火山引擎云数据库 PostgreSQL 版可在控制台 > 参数配置中修改 wal_levellogical,修改后需重启集群生效。
    • 自建 PostgreSQL 数据库需手动修改 postgresql.conf 文件。
  2. 第二步:配置 pg_hba.conf(自建数据库)
    对于自建 PostgreSQL,需要在 pg_hba.conf 文件中添加允许复制连接的记录:

    # 允许 DataSail 资源组 IP 段进行复制连接
    host    replication     datasail_user     0.0.0.0/0     md5
    
  3. 第三步:重启 PostgreSQL 服务
    修改配置文件后,需要重启 PostgreSQL 服务使配置生效:

    sudo systemctl restart postgresql
    
  4. 第四步:创建逻辑复制槽
    必须在完成 publication 创建之后再创建复制槽。请确保在创建复制槽时已连接到正确的目标数据库。

    -- 创建逻辑复制槽(必须使用 pgoutput 插件)
    SELECT pg_create_logical_replication_slot('datasail_pgoutput_slot', 'pgoutput');
    

    说明

    • 每个使用同一 PostgreSQL 集群的连接都需要创建唯一的复制槽,复制槽名称不能以数字开头。
    • 请确保服务器有足够的磁盘空间存储 WAL 日志。如果同步中断,WAL 日志会在服务器上累积。如需释放空间,可以删除复制槽(会同时删除其未消费的日志)。
  5. 第五步:验证配置是否生效

    -- 检查 wal_level 是否为 logical
    SHOW wal_level;
    -- 期望结果:logical
    
    -- 检查 max_replication_slots
    SHOW max_replication_slots;
    -- 期望结果:大于等于当前复制槽数量
    
    -- 检查 max_wal_senders
    SHOW max_wal_senders;
    
    -- 检查可用的 WAL 发送进程数
    SELECT count(*) FROM pg_stat_replication;
    -- max_wal_senders 值应大于此查询结果
    
    -- 验证 publication 是否创建成功
    SELECT * FROM pg_publication;
    
    -- 验证 publication 中包含的表
    SELECT * FROM pg_publication_tables;
    
    -- 验证复制槽是否创建成功
    SELECT * FROM pg_replication_slots;
    

2.3 复制标识设置(实时同步必读)

PostgreSQL 实时同步依赖复制标识(Replica Identity)来精准识别数据变更。必须将需要同步的表设置为 FULL 模式:

-- 检查表的复制标识设置
-- d=默认(主键)  n=无  f=全列  i=索引
SELECT relreplident FROM pg_class WHERE relname = 'your_table_name';

-- 设置为 FULL 模式(推荐)
ALTER TABLE your_table_name REPLICA IDENTITY FULL;

说明

  • d(默认):如果表有主键,则使用主键作为复制标识;
  • n(无):不存在复制标识,无法精准识别 UPDATE 和 DELETE 操作,对应数据可能不会实时同步到目标表;
  • f(全列):使用所有列作为复制标识,UPDATE 和 DELETE 操作时都能精准识别每行每列;
  • 建议对所有需要实时同步的表都设置为 FULL 模式,确保数据一致性。

2.4 读副本建议

对于生产环境的大表全量同步,建议在 PostgreSQL 只读副本(Read Replica / Standby) 上进行数据采集,而非直接读取主库,以避免对线上业务造成性能影响。

  • 火山引擎云数据库 PostgreSQL 版支持创建只读实例。
  • 自建 PostgreSQL 可通过流复制搭建 Standby 节点。

注意

为支持全量同步读从库、增量同步读主库(WAL 必须从主库读取),需要在 PostgreSQL 数据源配置时,新增高级参数 slave_host,其对应参数值为从库域名信息。该数据源建议只在解决方案场景中使用。

2.5 网络连通

确保集成同步任务使用的独享数据集成资源组,具有 PostgreSQL 数据库节点的网络访问能力。网络互通方案详见网络连通解决方案

  • 数据源为 RDS 云数据库实例时,需要将集成资源组所在 VPC 中的 IPv4 CIDR 地址添加到 PostgreSQL 访问白名单中。

    注意

    • 如果 PostgreSQL 数据源实例所在的 VPC 和独享集成资源组所在的 VPC 相同时,您仅需将 VPC 中的 IPv4 CIDR 地址添加到 PostgreSQL 访问白名单中;
    • 如果 PostgreSQL 数据源实例所在的 VPC 和独享集成资源组所在的 VPC 不同时,您需要先通过 CEN 云企业网打通两个 VPC 网络,然后将集成资源组 VPC 和 PostgreSQL 所在 VPC 中的两个 IPv4 CIDR 地址,均添加到 PostgreSQL 访问白名单中。
    • 若考虑安全因素,为了减少 IP CIDR 的访问范围,您至少需要将集成资源组绑定的子网下的 IPv4 CIDR 地址加入到数据库白名单中。
    添加白名单的操作如下:
    1. 确认集成资源组所在的 VPC。
      Image
    2. 查看 VPC 的 IPv4 CIDR 地址。

      注意

      若考虑安全因素,减少 IP CIDR 的访问范围,您至少需要将集成资源组绑定的子网下的 IPv4 CIDR 地址加入到数据库白名单中。

      Image
    3. 将获取到的 IPv4 CIDR 地址添加进 PostgreSQL 数据库白名单中,添加操作详见创建白名单
      Image
  • 数据源为公网自建数据源,需通过公网形式访问:
    1. 集成资源组开通公网访问能力,操作详见开通公网
    2. 并将公网 IP 地址,添加进 PostgreSQL 数据库白名单中。

    注意

    • DataSail 不支持通过负载均衡器(Load Balancer)连接 PostgreSQL 数据库,请使用数据库实例的直连地址。
    • 如需通过 SSH 隧道连接内网数据库,请先配置 SSH 数据源,并在 PostgreSQL 数据源中关联 SSH 连接信息。详见配置 SSH 数据源

2.6 连接安全(SSL)

注意

对于跨公网传输的数据同步场景,强烈建议启用 SSL 加密连接,防止数据在传输过程中被窃取或篡改。

DataSail 的 PostgreSQL 数据源支持以下四种 SSL 模式,具体说明请参见 PostgreSQL SSL 官方文档

SSL 模式

说明

适用场景

Disable

不使用 SSL 模式

私网访问,无加解密性能损耗

Allow

允许使用 SSL 模式,只有 Server 端一定需要使用 SSL 通信时才启用

一般场景

Prefer

倾向于使用 SSL 模式,只要 Server 端支持 SSL 就会启用

推荐的默认选项

Require

强制使用 SSL 模式

公网访问,会有加解密的性能损耗

3 支持的字段类型

当前主要字段支持情况如下:

字段类型

离线读(PostgreSQL Reader)

离线写(PostgreSQL Writer)

char

支持

支持

bpchar

支持

支持

varchar

支持

支持

text

支持

支持

character varying

支持

支持

character

支持

支持

smallint / int2

支持

支持

integer / int / int4

支持

支持

bigint / int8

支持

支持

smallserial

支持

支持

serial

支持

支持

bigserial

支持

支持

double / float8

支持

支持

double precision

支持

支持

money

支持

支持

numeric / decimal

支持

支持

real / float4

支持

支持

boolean / bool

支持

支持

date

支持

支持

time

支持

支持

timetz

支持

支持

timestamp

支持

支持

timestamptz

支持

支持

bytea

支持

支持

bit

支持

支持

bit varying / varbit

支持

支持

uuid

支持

支持

cidr

支持

支持

xml

支持

支持

inet

支持

支持

macaddr

支持

支持

enum

支持

支持

json

支持

支持

jsonb

支持

支持

interval

支持

支持

oid

支持

支持

box

支持

支持

line

支持

支持

lseg

支持

支持

tsquery

支持

支持

tsvector

支持

支持

polygon

支持

支持

circle

支持

支持

point

支持

支持

path

支持

支持

geography

支持

支持

roaringbitmap

支持

不支持

geometry

支持

不支持

_aclitem

不支持

不支持

_int2 / _int4 / _int8

不支持

不支持

_float4 / _float8

不支持

不支持

_bool / _text / _char

不支持

不支持

_oid

不支持

不支持

说明

PostgreSQL 数组类型(以 _ 开头的类型,如 _int4_text 等)目前不支持直接同步。如您有数组数据同步需求,建议在源端使用 array_to_string() 函数将数组转换为文本格式后,通过 VARCHAR/TEXT 字段进行同步。

4 数据源注册

在多环境模式的项目下,数据源能够实现开发环境与生产环境的注册隔离。并且在进行离线集成任务配置时,多环境下的数据源信息均需要进行注册。

4.1 配置信息填写

新建数据源操作详见配置数据源,下面为您介绍用连接串方式配置 PostgreSQL 数据源信息:

说明

连接串形式支持跨账号/跨地域访问 PostgreSQL 数据源实例,您可通过公网或 CEN 云企业网打通独享集成资源组与数据源实例的网络,确保网络能互通。网络互通操作详见网络连通解决方案

参数

说明

基本配置

数据源类型

PostgreSQL

接入方式

连接串

数据源名称

数据源的名称,可自行设置,仅支持中文,英文,数字,“_”,100个字符以内。

参数配置

Database

输入已创建成功的 PostgreSQL 数据库名称。

SSL 模式

SSL 加密模式可以提供窃听攻击、中间人攻击(Man-in-the-middle MITM)、假冒攻击的保护措施。不同的 SSL 模式用于提供不同等级的保护,支持 Disable、Allow、Prefer、Require 四个选项,详细说明请参见2.6 连接安全(SSL)

Host

输入连接数据库时,使用的主机名或 IP 地址。

Port

PostgreSQL 数据库连接的端口号。

是否使用KMS密码

可选择是否使用KMS密码连接数据库。默认关闭不使用,开启后将使用KMS密码。

用户名

有权限访问数据库的用户名信息。

说明

是否使用KMS密码为关闭状态时,需设置该参数。

密码

输入用户名对应的密码信息。

说明

是否使用KMS密码为关闭状态时,需设置该参数。

Secret

用于连接数据库的KMS密码,下拉可选已创建的 PostgreSQL 凭据。KMS相关信息统一在密钥管理系统中管理,创建凭据的操作可参见凭据管理

说明

是否使用KMS密码为开启状态时,需设置该参数。

高级参数

数据源配置支持添加 PostgreSQL 相关的高级参数,如配置 PostgreSQL 从库相关的 Host 信息,以参数名和参数值的形式填入。目前需配置的高级参数如下:

  • slave_host:从库域名信息(实时整库解决方案场景使用,全量读从库、增量读主库)。

4.2 连通性验证

数据源注册完成后,单击测试连通性按钮,系统将依次检查以下项目:

测试项

说明

常见失败原因

网络连通

资源组能否访问 PostgreSQL 主机和端口

白名单未配置、VPC 未打通、防火墙拦截

认证校验

用户名和密码是否正确

密码错误、账号不存在、pg_hba.conf 限制

权限检查

账号是否具备所需权限

缺少 SELECT / REPLICATION 权限

数据库存在性

指定的数据库是否存在

数据库名拼写错误

如果测试失败,请根据错误提示逐项排查。您也可以在 PostgreSQL 客户端(psql)执行以下命令自行验证:

-- 验证账号是否能连接
-- psql -h <host> -p <port> -U <user> -d <database>

-- 验证权限
SELECT * FROM information_schema.role_table_grants WHERE grantee = 'datasail_user';

-- 验证 WAL 配置(实时同步场景)
SHOW wal_level;
SELECT * FROM pg_replication_slots;
SELECT * FROM pg_publication;

5 同步方式选择指引

DataSail 提供以下多种 PostgreSQL 数据同步方式,请根据您的业务场景选择合适的方式:

同步方式

适用场景

实时性

对源库影响

操作入口

离线全量同步

首次迁移、定期全量刷新

低(按调度周期)

较大(需全表扫描)

数据开发 > 数据集成 > 新建任务

离线增量同步(带过滤条件)

按时间字段增量拉取

低(按调度周期)

较小

数据开发 > 数据集成 > 新建任务

实时整库同步(解决方案)

整库实时入仓、CDC 场景

高(秒级延迟)

极小(仅读取 WAL 日志)

DataSail 控制台 > 数据同步方案 > 新建

流式写入

实时写入 PostgreSQL 目标表

N/A(作为目标端)

数据开发 > 数据集成 > 新建任务

下面列举解决方案单表任务同步操作时,在不同维度的差异:

对比维度

单表任务(数据集成入口)

解决方案(数据同步方案入口)

操作入口

数据开发 > 数据集成 > 新建任务

DataSail 控制台 > 数据同步方案 > 新建

同步粒度

单表级别,需逐表配置

整库级别,一次选择多张表

同步模式

离线批式读/写、流式写(需分别创建)

全增量一体(自动创建全量批任务 + 增量流任务)

目标表创建

需手动提前创建

支持自动建表、使用已有表

DDL 同步

不支持

支持新建表、新增列、删除列、重命名列、修改列类型等 DDL 策略

数据缓存

不支持

支持通过 Kafka/BMQ/DataSail 内置 Topic 缓存,提升稳定性

数据转换

支持基础模式/转换模式

支持自定义 SQL 转换规则

适用场景

定期同步少量表、简单 ETL

PostgreSQL 实时入仓、整库迁移、CDC 场景

最近更新时间:2026.04.14 19:52:45
这个页面对您有帮助吗?
有用
有用
无用
无用