测试环境:PostgreSQL 13.2

1、逻辑订阅简介

由于物理复制只能做到这个集群的复制,不能正对某个对象(表)进行复制,且物理复制的备库只能读,不能写。相反,逻辑订阅同时支持主备库读写,且可以做到针对某个对象进行复制。有更高的灵活性。但是逻辑订阅对主库性能影响较大。

2、发布端配置

pg_hba.conf 文件中加入,允许备用库访问。

host    mydbname     postgres        192.168.6.180/24        trust

postgresql,conf文件中,将wal_level修改为:

wal_level =  logical

登录发布端db,发布端角色必须具备replication权限,或超级用户权限,本文采用postgres用户。

postgres=#\c mydbname  //连接要操作的数据库
mydbname=# create table t1(id int primary key, info text, crt_time timestamp); //创建被发布表格
mydbname=# create publication testpub1 for table t1; //创建发布对象
ALTER TABLE t1 OWNER TO myuser; //将跟用户myuser增加访问权限

查看当前库有哪些发布:

mydbname=# select * from pg_publication;
pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete
----------+----------+--------------+-----------+-----------+-----------
testpub1 | 10 | f | t | t | t
(1 row)

3、配置订阅端

创建subscription用户,必须是超级用户,本文使用postgres用户。

postgres=#\c mydbname  //连接要操作的数据库
mydbname=# create table t1(id int primary key, info text, crt_time timestamp); //创建被发布表格
ALTER TABLE t1 OWNER TO myuser; //将跟用户myuser增加访问权限
mydbname=# create subscription testsub1 connection 'hostaddr=192.168.6.180 port=5433 user=postgres dbname=mydbname' publication testpub1 with (enabled, create_slot, slot_name='sub1_from_pub1');

查询有哪些订阅

postgres=# select * from pg_subscription ;
subdbid | subname | subowner | subenabled | subconninfo | subslotname | subsynccommit | subpublications
---------+----------+----------+------------+----------------------------------------------------------------+----------------+---------------+-----------------
16401 | testsub1 | 10 | t | hostaddr=192.168.7.177 port=1921 user=postgres dbname=postgres | sub1_from_pub1 | off | {testpub1}
(1 row) postgres=# select * from pg_stat_subscription ;
subid | subname | pid | relid | received_lsn | last_msg_send_time | last_msg_receipt_time | latest_end_lsn | latest_end_time
-------+----------+------+-------+--------------+-------------------------------+-------------------------------+----------------+-------------------------------
44943 | testsub1 | 7877 | | 1/76119308 | 2021-04-10 13:20:07.497634+08 | 2021-04-11 01:23:39.104443+08 | 1/76119308 | 2021-04-10 13:20:07.497634+08
(1 row)

4、发布端数据库插入测试

mydbname=# insert into t1 select t,md5(random()::text),clock_timestamp() from generate_series(1,1000) t;
INSERT 0 1000

5、订阅端查看:

mydbname=# select count(*) from t1;
count
-------
100
(1 row)
mydbname=# select * from t1 limit 10;
id | info | crt_time
----+----------------------------------+----------------------------
1 | 31422ff05d990455a4632bf97cbcda45 | 2021-04-10 13:21:57.780586
2 | 4a3f42ed6421f89cdf8c09e221431520 | 2021-04-10 13:21:57.780713
3 | 88423917787f7c99340668c324fc35d2 | 2021-04-10 13:21:57.78072
4 | 11dd182301956e9458460fc3f33cc5d6 | 2021-04-10 13:21:57.780724
5 | bd0a78455bc400b39a697148a564e9eb | 2021-04-10 13:21:57.780727
6 | 6b3b36fd0fe55d49932b990809913744 | 2021-04-10 13:21:57.78073
7 | 3e13b1856a5f5623acfe607de775f0c1 | 2021-04-10 13:21:57.780733
8 | f7b51908bf88974a7532ce0ec760d585 | 2021-04-10 13:21:57.780736
9 | f9002e38c2fb8a3ed6c0453d518815aa | 2021-04-10 13:21:57.780739
10 | ea68f6d87051fb8fef4586c0a2c04f5c | 2021-04-10 13:21:57.780741
(10 rows)

PostgreSQL逻辑订阅的更多相关文章

  1. PostgreSQL逻辑复制使用记录

    之前逻辑复制刚刚出来的时候就使用过,但是没有进行整理,这次一个项目需要逻辑复制的自动迁移,再次拾起逻辑复制. 在此之前有两个疑问: 1)同一个表,既有流复制,又有逻辑复制,这样数据会有两份吗? --不 ...

  2. PostgreSQL逻辑复制之pglogical篇

    PostgreSQL逻辑复制之slony篇 一.pglogical介绍 pglogical 是 PostgreSQL 的拓展模块, 为 PostgreSQL 数据库提供了逻辑流复制发布和订阅的功能. ...

  3. Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务

    本文主要介绍 Windows 环境下搭建 PostgreSQL 的主从逻辑复制,关于 PostgreSQl 的相关运维文章,网络上大多都是 Linux 环境下的操作,鲜有在 Windows 环境下配置 ...

  4. PostgreSQL逻辑复制之slony篇

    Slony是PostgreSQL领域中最广泛的复制解决方案之一.它不仅是最古老的复制实现之一,它也是一个拥有最广泛的外部工具支持的工具,比如pgAdmin3.多年来,Slony是在PostgreSQL ...

  5. PostgreSQL逻辑复制解密

    在数字化时代的今天,我们都认同数据会创造价值.为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景挖掘数据的价值.而在这 ...

  6. PostgreSQL逻辑复制到kafka-实践

    kafka 安装 wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz cp kafka_2.12-2.0.1.t ...

  7. postgresql逻辑备份工具pg_dump和pg_resotre学习

    (一)pg_dump备份 pg提供了pg_dump和pg_dumpall命令进行数据库的备份,pg_dumpall是将整个pg集群转储到一个脚本文件中,而pg_dump命令可以选择一个数据库或者部分表 ...

  8. PostgreSQL逻辑复制槽

    Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...

  9. postgresql从库搭建--逻辑复制

    1 物理复制及逻辑复制对比 前文做了PostgreSQL物理复制的部署,其有如下主要优点 物理层面完全一致,是主要的复制方式,其类似于Oracle的DG 延迟低,事务执行过程中产生REDO recor ...

随机推荐

  1. ZOJ 1141:Closest Common Ancestors(LCA)

    Closest Common Ancestors Time Limit: 10 Seconds      Memory Limit: 32768 KB Write a program that tak ...

  2. 【机器学*】k*邻算法-01

    k临*算法(解决分类问题): 已知数据集,以及该数据对应类型 给出一个数据x,在已知数据集中选择最接*x的k条数据,根据这k条数据的类型判断x的类型 具体实现: from numpy import * ...

  3. 第二十八个知识点:什么是公钥密码学的IND-CCA安全定义?

    第二十八个知识点:什么是公钥密码学的IND-CCA安全定义? 我们将在这篇博客中讨论公钥加密的IND-CCA安全. IND-CCA安全代表选择明文的不可伪造性.这样的安全方案的思想就是给定一个密文,攻 ...

  4. element 表格行内进行编辑

    <template> <div class="process_manage"> <el-card class="box-card" ...

  5. Java EE数据持久化框架 • 【第2章 MyBatis实现DML操作】

    全部章节   >>>> 本章目录 2.1 标签 2.1.1 标签简单应用 2.1.2 使用JDBC方式返回主键自增的值 2.1.3 使用标签返回普通主键的值 2.1.4 实践练 ...

  6. jquery控制元素的隐藏和显示的几种方法

    使用jquery控制div的显示与隐藏,一句话就能搞定,例如: 方法一 显示: $("#id").show()表示为display:block, 隐藏: $("#id&q ...

  7. 编写Java程序,应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能

    查看本章节 查看作业目录 需求说明: 应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能 实现思路: 创建 Java 项目,在项目中创建服务端类 ChatServerThre ...

  8. 编写Java程序,使用JDialog构造登录窗体

    返回本章节 返回作业目录 需求说明: 实现思路: 定义用户信息实体类User. 创建LoginDemoStart主类,初始化UI. 从UI获取用户信息并保存到User实体. 实现代码:

  9. C# 执行Javascript脚本

    前一阵子使用C#编写SCXML状态机,需要解析EMCScript表达式,使用了Jint库(https://github.com/sebastienros/jint/),当时感觉与C#之间的数据转换不是 ...

  10. Java:对一个对象序列化和反序列化的简单实现

    名词解释 序列化:将Java对象转化成字节的过程 反序列化:将字节转化成Java对象的过程 字节:1字节(byte)= 8bit,bit就是计算机认识的二进制 序列化的作用 Java对象是在Java虚 ...