应用指南 | 在IvorySQL中使用pglogical扩展模块

pglogical 是 PostgreSQL 的逻辑复制插件,专注于PostgreSQL数据库间高效复制和同步数据。它支持选择性复制特定表或数据,而非整个数据库,从而提供灵活性和低延迟的实时更新。与物理复制相比,逻辑复制能够跨不同版本的 PostgreSQL,便于版本升级和数据迁移,同时支持多源复制,将多个源数据库的数据整合到同一目标数据库。这使得 pg_logical 特别适用于负载均衡、实时数据分析、灾难恢复和数据整合等多种场景。

IvorySQL作为完全兼容PG的Oracle兼容开源数据库,对pglogical也能做到完美支持。

1

安装环境

操作系统:CentOS Stream 9

数据库版本:IvorySQL 3.4、IvorySQL 3.3

pglogical版本:pglogical v2.4.4

2

安装过程

yum install -y zlib-devel pam-devel libxml2-devel libxslt-devel lz4-develwget https://github.com/2ndQuadrant/pglogical/archive/refs/tags/REL2_4_4.tar.gztar -xvf ./REL2_4_4.tar.gzPATH=/usr/local/ivorysql/ivorysql-3/bin/:$PATH make clean allsudo PATH=/usr/local/ivorysql/ivorysql-3/bin/:$PATH make install在主库与备库上,同时进行如下修改:

3

配置环境

在主库与备库上,同时进行如下修改:

在IvorySQL的data目录下,修改ivorysql.conf文件;

在 shared_preload_libraries中,添加pglogical。

图片

同时,修改data目录下的postgresql.conf文件。

添加如下内容:​​​​​​​

wal_level = 'logical'max_worker_processes = 10max_replication_slots = 10max_wal_senders = 10

图片

修改 listen_addresses = '*'

图片

在 pg.hba.conf 中,

添加 host replication all 0.0.0.0/0 trust

图片

配置修改完成后,启动或重启数据库。

4

使用过程

发布端IP: 192.168.21.205 (IvorySQL 3.4)

订阅端IP: 192.168.21.167 (IvorySQL 3.3)

>>>发布端

psql 连接数据库,执行create extension pglogical;

图片

主库内添加测试表及初始数据​​​​​​​

create table test_pglogical(id int primary key, name text);insert into test_pglogical(1, 'test pglogical');


创建发布端node

SELECT pglogical.create_node(node_name := 'provider1',dsn := 'host=192.168.21.205 port=5432 dbname=ivorysql');

图片

将发布端public仓库内的所有表,添加到名为default的replication中

SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);

图片

>>>订阅端

psql 连接数据库,执行create extension pglogical;

图片

创建相同数据库

create table test_pglogical(id int primary key, name text);

订阅端创建node

SELECT pglogical.create_node(node_name := 'subscriber1',dsn := 'host=192.168.21.167 port=5432 dbname=ivorysql');

订阅端创建订阅

SELECT pglogical.create_subscription( subscription_name := 'subscription1', provider_dsn := 'host=192.168.21.205 port=5432 dbname=ivorysql');select * from test_pglogical;
 

我们就可以看到 IvorySQL可以完美支持pglogical。

5 Oracle 兼容及新增表同步

>>>发布端

创建含有Oracle数据类型的表​​​​​​​

set ivorysql.compatible_mode to oracle;create table test_oracle_type(id int primary key, name varchar2(20), value number(10));insert into test_oracle_type values(1, 'oracle varchar 1', 1);insert into test_oracle_type values(2, 'oracle varchar 2', 2);

图片

将新建表添加到发布端的replication中

select pglogical.replication_set_add_table('default',relation:='public.test_oracle_type'::regclass,synchronize_data:=true);

图片

>>>订阅端​​​​​​​
set ivorysql.compatible_mode to oracle;create table test_oracle_type(id int primary key, name varchar2(20), value number(10));select * from test_oracle_type;

图片

即可查看到新添加的表信息。

在发布端继续插入一些数据。​​​​​​​

insert into test_oracle_type values(3, 'oracle varchar 3', 3);select * from test_oracle_type;

图片

发布端插入数据后,订阅端数据同步成功。

上一篇:LSP的建立


下一篇:本地生活平台开发搭建方案 同城O2O电商平台推广运营