暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL逻辑复制实现多实例数据同步

原创 梧桐 2023-08-17
777

概述

PostgreSQL逻辑复制可执行有选择性的复制,在不同的数据大版本之间进行复制,在不同平台间进行复制,备库写入操作,解决物理复制的局限性。逻辑复制采用的是==“发布-订阅”==模型,一个或多个订阅者可以订阅一个发布者上的一个或多个发布。订阅者最初从发布者那里收到复制的数据库对象的副本,并在同一对象上实时进行后续更改。这种数据复制方法又被称为事务复制。

建两个数据库实例

./initdb -W -D ../data1
./initdb -W -D ../data2

修改实例A的postgresql.conf

port=5433
wal_level=Logical

修改实例B的postgresql.conf

port=5434
wal_level=Logical

启动

./pg_ctl restart -D ../data1
./pg_ctl restart -D ../data2

开两个窗口操作

A窗口,用于发布

./psql -p 5433

接下来,我们将展示如何使用逻辑复制。首先我创建一个简单的表,并插入一条记录。

create table t1 (a integer PRIMARY KEY, b integer); insert into t1 values(1, 1);

接下来,我们为这个表创建一个发布。

create publication my_pub FOR table t1;

现在,发布已经创建完了,现在我们需要创建订阅。注意,我们在同一机器上的不通端口运行两个postgres数据库实例。

B窗口,用于订阅

./psql -p 5434
create table t1(a integer PRIMARY KEY, b integer); create SUBSCRIPTION my_sub CONNECTION 'host=localhost port=5433 dbname=postgres password=mypassword' PUBLICATION my_pub;

现在,我们可以验证数据是否被复制过来。

TABLE t1;

接下来,我在验证数据更改之后是否被复制。首先,我们在发布者上插入一条记录,随后在订阅者上查看该记录是否被复制。

更新订阅

A窗口,更新数据

insert into t1 values(2, 2); ... 1 rows

B窗口,查看订阅数据是否被更新

table t1; ... 2 rows

从上面可以看到,数据被准确地复制到了订阅者。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论