兼容模式

  • PG模式
    • 生产为PG模式(单节点)(必须wal_level=logical)
    • 备库模式(只读备库)(主从必须wal_level=logical)

注:截止2024年11月,teledb-x暂不支持DDL同步

1 数据库配置(必选项)

1.1 日志格式配置(如果已经修改过,可忽略)

  • 修改postgresql.conf文件
#逻辑级别日志
wal_level = logical
#如果需要远程读日志,需要设置,至少为1,就接受1个读日志线程
max_wal_senders = 10   #建议大于等于10 
#设置日志保留个数,设置太少了,日志量太大了日志自动删除后,容易读不到日志
wal_keep_segments = 10   #建议大于等于10

# wal_keep_size:要为日志复制进程保留多少日志量。旧版本使用的是wal_keep_segments参数(要为日志复制进程保留多少个日志文件),在pg 13中,该参数已被移除。wal_keep_size = wal_keep_segments * wal_segment_size
# 修改完成后需要重启数据库:pg_ctl -D /var/lib/postgresql/data -l logfile restart
# wal_level=logical 需要重启数据库
  • 验证是否成功
postgres=# select name,setting,category from pg_settings where name in ('wal_level','wal_keep_segments','max_wal_senders','wal_keep_size');
       name        | setting |           category
-------------------+---------+-------------------------------
 max_wal_senders   | 10      | Replication / Sending Servers
 wal_keep_segments | 10      | Replication / Sending Servers
 wal_level         | logical | Write-Ahead Log / Settings
(3 rows)

2 数据表配置(必选项)

2.1 需要同步的表打开补充日志

ALTER TABLE schemaname.tabname REPLICA IDENTITY FULL;

---批量生成打开表补充日志sql语句参考
SELECT 'ALTER TABLE '||nspname||'.'||relname||' REPLICA IDENTITY FULL;' FROM pg_class c,pg_namespace n where relnamespace = n.oid and c.relkind='r' and nspname='public';

---注1:表所属用户或者超级用户才有开启REPLICA IDENTITY权限,否则报错:must be owner of table

2.1.1 分区表检查SQL以及注意事项

源表为分区表开启补充日志
SELECT
   parent.relname AS partitioned_table_name,
   parent.relkind AS partitioned_table_type,
   parent.relpartbound AS partition_bound,
   child.relname,
   child.relkind,
   child.relreplident,
   'ALTER TABLE ' || nspname || '.' || child.relname || ' REPLICA IDENTITY FULL' rif
FROM
 pg_class parent
LEFT JOIN pg_inherits ON pg_inherits.inhparent = parent.oid
LEFT JOIN pg_class child ON pg_inherits.inhrelid = child.oid
LEFT JOIN pg_namespace pns ON child.relnamespace = pns.oid
WHERE
 parent.relkind = 'p'
AND parent.relname = 'tabname';

---该语句能查询出分区表中的分区是否开启补充日志,若没有开启,可通过生成的批量SQL开启表补充日志

3 用户授权(必选项)

3.1 创建用户及赋权

切换到同步库下,执行如下(数据库命令行执行):

create user zcbus with password  '*****';
grant connect on database *** to zcbus;  # ***为需要同步的数据库名称
create schema zcbus authorization zcbus;
grant select on all tables in schema pg_catalog to zcbus;
grant select on all tables in schema *** to zcbus;  # *为需要同步的schema名称
alter user zcbus REPLICATION;
grant usage on schema *** to zcbus;    # *为需要同步的schema名称

以上过程中,web页面不要点击注册按键,所有配置手工完成!

4 数据类型支持列表

 在抓取数据时,我们将PostgreSql数据类型与Zcbus支持的类型相匹配。如果我们不支持某个数据类型,我们会自动将该类型更改为最受支持的类型,或者在某些情况下,根本不加载该数据。我们的系统将会抛出异常、跳过我们不接受或转换的数据类型对应表。

PostgreSql类型 是否支持 描述
smallint 支持
integer 支持
bigint 支持
decimal(m,d) 支持
numeric(m,d) 支持
real 支持
double precision 支持
smallserial 支持
serial 支持
bigserial 支持
money 支持
character varying(n) 支持
varchar(n) 支持
character(n) 支持
char(n) 支持
text 支持
timestamp 支持
tmestamp with time zone 支持
date 支持
time 支持
time with time zone 支持
interval 支持
bit(n) 支持
bit varing(n) 支持
boolean 支持
point 支持
line 支持
lseg 支持
box 支持
path 支持
polygon 支持
circle 支持
cidr 支持
inet 支持
macaddr 支持
tsvector 支持
tsquery 支持
uuid 支持
xml 支持
文档更新时间: 2024-10-18 22:32   作者:周风磊