示例-从 PostgreSQL 同步到 ProtonBase

示例-从 PostgreSQL 同步到 ProtonBase

准备工作

网络部分参考 数据同步网络配置

权限

只包含全量作业,授予如下权限,其中 schema1、other_schema 替换成需要备同步的 schema,user 为同步作业的用户

postgres=# grant select on all tables in schema ${schema1},[${other_schema}] to ${user};
postgres=# grant usage on ${schema1},[${other_schema}]  to ${user};

包含增量作业,请新增带 REPLICATION 权限的用户(因为云厂商不授予 SuperUser 账号,无法给已有用户赋予 REPLICATION 权限)

  • 高权限账号登录
psql postgres://${user}:${password}@${host}:5432/${your_database_name}
  • 创建 cdc 同步用户:
CREATE USER ${cdc_user} WITH REPLICATION ENCRYPTED PASSWORD '${cdc_user_passord}';
  • 对 cdc_user 赋权
postgres=# grant select on all tables in schema schema1,[other_schema] to ${cdc_user};
postgres=# grant usage on schema schema1,[other_schema] to ${cdc_user};

增量作业设置

wal_level = logical

创建订阅(PUBLICATION)

  • 高权限账号登录
psql -h ${host} -p 5432 -U ${user}  "dbname=${your_database_name} replication=database" -W
  • 创建订阅
CREATE PUBLICATION teleport_pub FOR ALL TABLES;

或者

CREATE PUBLICATION teleport_pub FOR TABLE ${your_schema}.${your_table}, ...;

数据源配置

PostgreSQL 数据源需要配置如下连接属性

  • Host:postgres 服务地址
  • Port:postgres 服务端口,一般为 5432
  • Username:上述权限的用户
  • Password:上述权限用户对应的密码

默认节点映射

节点的默认映射规则如下

concat(SOURCE_DATABASE, '.', SOURCE_SCHEMA, '.', SOURCE_OBJECT)

含义为:

PostgreSQL 的表比如 d.s.t (其中 d 为 database 名,s 为 scheam, t 为表名)映射到 ProtonBase 下的 d.s.t

默认字段映射

"_" 开头表示数组

PostgreSQLProtonBase
INT2INT2
_INT2_INT2
INT4INT4
_INT4_INT4
INT8INT8
_INT8_INT8
CHARCHAR
_CHAR_CHAR
BPCHARBPCHAR
_BPCHAR_BPCHAR
VARCHARVARCHAR
_VARCHAR_VARCHAR
TEXTTEXT
_TEXT_TEXT
NUMERICNUMERIC
_NUMERIC_NUMERIC
FLOAT4FLOAT4
_FLOAT4_FLOAT4
FLOAT8FLOAT8
_FLOAT8_FLOAT8
BOOLBOOL
_BOOL_BOOL
DATEDATE
_DATE_DATE
TIMETIME
_TIME_TIME
TIMETZTIMETZ
_TIMETZ_TIMETZ
TIMESTAMPTIMESTAMP
_TIMESTAMP_TIMESTAMP
TIMESTAMPTZTIMESTAMPTZ
_TIMESTAMPTZ_TIMESTAMPTZ
BYTEABYTEA
_BYTEA_BYTEA
NAMENAME
NAME_ARRAYNAME_ARRAY
BITBIT
_BIT_BIT
INTERVALINTERVAL
_INTERVAL_INTERVAL
VARBITVARBIT
_VARBIT_VARBIT
UUIDUUID
_UUID_UUID
XMLXML
_XML_XML
JSONBJSONB
_JSONB_JSONB
JSONJSON
_JSON_JSON