PostgreSQL逻辑订阅
测试环境: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逻辑订阅的更多相关文章
- PostgreSQL逻辑复制使用记录
之前逻辑复制刚刚出来的时候就使用过,但是没有进行整理,这次一个项目需要逻辑复制的自动迁移,再次拾起逻辑复制. 在此之前有两个疑问: 1)同一个表,既有流复制,又有逻辑复制,这样数据会有两份吗? --不 ...
- PostgreSQL逻辑复制之pglogical篇
PostgreSQL逻辑复制之slony篇 一.pglogical介绍 pglogical 是 PostgreSQL 的拓展模块, 为 PostgreSQL 数据库提供了逻辑流复制发布和订阅的功能. ...
- Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
本文主要介绍 Windows 环境下搭建 PostgreSQL 的主从逻辑复制,关于 PostgreSQl 的相关运维文章,网络上大多都是 Linux 环境下的操作,鲜有在 Windows 环境下配置 ...
- PostgreSQL逻辑复制之slony篇
Slony是PostgreSQL领域中最广泛的复制解决方案之一.它不仅是最古老的复制实现之一,它也是一个拥有最广泛的外部工具支持的工具,比如pgAdmin3.多年来,Slony是在PostgreSQL ...
- PostgreSQL逻辑复制解密
在数字化时代的今天,我们都认同数据会创造价值.为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景挖掘数据的价值.而在这 ...
- 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 ...
- postgresql逻辑备份工具pg_dump和pg_resotre学习
(一)pg_dump备份 pg提供了pg_dump和pg_dumpall命令进行数据库的备份,pg_dumpall是将整个pg集群转储到一个脚本文件中,而pg_dump命令可以选择一个数据库或者部分表 ...
- PostgreSQL逻辑复制槽
Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...
- postgresql从库搭建--逻辑复制
1 物理复制及逻辑复制对比 前文做了PostgreSQL物理复制的部署,其有如下主要优点 物理层面完全一致,是主要的复制方式,其类似于Oracle的DG 延迟低,事务执行过程中产生REDO recor ...
随机推荐
- C. Success Rate
Success Rate 题目链接 题意 给你两个分数形式的数,然后有两种变化方式 上下都+1 仅下面部分+1 让你求第一个分数变化到第二个分数的最小步数. 思路 有几种特殊情况分类讨论一下. 首先我 ...
- 【LeetCode】714. Best Time to Buy and Sell Stock with Transaction Fee 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...
- [源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑
[源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑 目录 [源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑 0x00 ...
- Mysql 层级无限嵌套
1.新建测试数据 新建channel表 DROP TABLE IF EXISTS channel; CREATE TABLE channel ( id INT(11) NOT NULL AUTO_IN ...
- fastapi(一)
废话不多说,直接上代码. 目录结构, 由于我也是刚开始学这个框架,只是了解了怎么注册蓝图,JWT的集成,数据库的集成,想了解更多,自行打开官方文档去详细阅读.fastapi官网文档链接 创建一个mai ...
- MarkDown 使用方法
MarkDown学习 标题的使用 在MarkDown中标题的使用,是用#+空格+标题名称,来进行编辑的.一个#就是一级标题, 两个#就是两级标题,以此类推,一定要加空格,否则无效 ### 三级标题 ...
- Java中对象的内存分配机制
一.内存划分 Java把内存划分为两种,一种是栈内存,另一种是堆内存. 1.栈内存 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配.当在一段代码块定义一个变量时,Java就在栈 ...
- MySQL数据操作与查询笔记 • 【第7章 连接查询】
全部章节 >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...
- localstorage的浏览器支持情况
localStorage的兼容性不错,就国内的情况,已经基本没有问题了.localStorage的原理很简单,浏览器为每个域名划出一块本地存储空间,用户网页可以通过localStorage命名空间进行 ...
- Linux操作系统RedHat6.5安装
1.说明 安装Linux操作系统Red Hat 6.5, 安装镜像为rhel-server-6.5-x86_64-dvd.iso. 2.开始安装 在BIOS里设置成从光驱启动, 服务器上电后会加载光驱 ...