1. 概述编辑
FDL 工程部署在 Linux 环境中,通过数据管道实时同步 PostgreSQL 数据前,需要参考本文在数据源中进行一些配置,为后续的数据同步做好准备。
注1:FDL 工程部署在 Windows 环境中,实时同步 PostgreSQL 数据前,环境准备步骤请参见:【Windows环境】PostgreSQL环境准备
注2:CDC原理和支持说明请参见:CDC原理和支持
2. 操作步骤编辑
注:当前不支持同步视图。
2.1 确认当前使用的数据库版本
确认是否为数据管道同步任务所支持的版本。
当前仅支持 PostgreSQL 9.4 及以上的单实例非只读数据库。支持情况详情参见:数据管道概述
2.2 修改REPLICA IDENTITY
该属性决定了当数据发生UPDATE,DELETE时,日志记录的字段
DEFAULT - 更新和删除将包含primary key列的现前值
NOTHING - 更新和删除将不包含任何先前值
FULL - 更新和删除将包含所有列的先前值
INDEX index name - 更新和删除事件将包含名为index name的索引定义中包含的列的先前值 如果有多表合并同步的场景,则Tapdata需要调整该属性为FULL 示例
修改代码如下:
alter table schema.tablename REPLICA IDENTITY FULL
1)使用默认的 postgres 账号登录名为 fdl 的数据库:-U指定用户,-d指定数据库,-h指定服务器,-p指定端口。
psql -U postgres -d fdl -h 192.168.101.119 -p 5432
输入密码后,登陆数据库。
2)例如将模式为 public 的表「产品名称维度」修改设置,则输入如下语句:
2.3 安装 wal2json
2.3.1 PostgreSQL 11 及以上版本
1)更新镜像库文件,刷新可安装的 wal2json 列表。
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
2)使用yum list wal2json*语句,列出可安装的 wal2json 。如下图所示:
3)根据 PostgreSQL 数据库版本和 Linux 内核版本选择 wal2json 。
使用rpm -qa | grep postgresql语句查看安装的数据库版本;cat /proc/version语句查看Linux内核版本。如下图所示:
所以本文示例选择 wal2json_12.x86_64 版本,安装语句为:yum install wal2json_12.x86_64
4)安装完成后,使用yum list wal2json*语句,可查看已安装的 wal2json 。如下图所示:
2.3.2 PostgreSQL 9.5 及以上,11 以下版本
2.4 修改配置文件
进入 PosgreSQL 安装目录下的 data 文件夹,进入 data 文件夹中,找到 postgresql.conf、pg_hba.conf,对这两个文件进行修改。
1)修改 PosgreSQL 复制槽设置。
本文示例中,postgresql.conf 文件在/var/lib/pgsql/12/data目录下,使用vi /var/lib/pgsql/12/data/postgresql.conf(用户根据实际情况修改 postgresql.conf 所在路径)语句编辑该文件,在文件末尾追加以下配置:
注:或者找到下面代码中的设置项,取消注释,修改对应的值。
shared_preload_libraries = 'wal2json'
wal_level = logical
max_wal_senders = 10
max_replication_slots = 10
2)设置用户 replication 权限。
本文示例中,pg_hba.conf 文件在/var/lib/pgsql/12/data目录下,使用vi /var/lib/pgsql/12/data/pg_hba.conf(用户根据实际情况修改 pg_hba.conf 所在路径)语句编辑该文件,把下图中红圈中的两行前边的 # 去掉:
2.5 重启数据库
用户根据实际情况修改语句:
systemctl restart postgresql-12
2.6 用户权限确认
以上都是用默认的用户 Postgres 进行,若用其他用户进行配置,则需要该用户为 PostgreSQL replication 角色、PostgreSQL login 角色,并且有需要同步的表的 select / update 权限。
创建用户命令: