pg入门12—pg中的subscriptions是什么

在 PostgreSQL(PG)中,Subscription(订阅) 是逻辑复制中的一个概念,用于从 Publication(发布) 中接收数据变更。Subscription 允许一个数据库实例(订阅者)连接到另一个数据库实例(发布者)并接收表数据的增量更改。订阅者可以应用发布者的 INSERTUPDATEDELETE 以及 TRUNCATE 操作,从而保持两者数据的同步。

逻辑复制中的角色

  • Publication(发布):由发布者数据库创建,定义哪些表或操作应该被发送给订阅者。
  • Subscription(订阅):由订阅者数据库创建,用于连接到发布者并接收数据变更。

工作原理

  • 在发布者数据库上创建一个 Publication,定义要发布的表和操作。
  • 在订阅者数据库上创建一个 Subscription,连接到发布者并订阅所定义的 Publication。
  • PostgreSQL 会先把发布者中指定表的现有数据同步到订阅者,然后继续将增量的数据变更实时传输到订阅者。

创建和管理 Subscriptions

1. 创建 Subscription

使用 CREATE SUBSCRIPTION 命令在订阅者数据库中创建一个订阅。订阅者通过连接字符串连接到发布者,指定要订阅的发布。

  • 创建订阅,并且同步数据:

    CREATE SUBSCRIPTION my_subscription CONNECTION 'host=remote_host dbname=remote_db user=remote_user password=remote_password' PUBLICATION my_publication;
    • CONNECTION:用于连接发布者数据库的连接字符串。
    • PUBLICATION:指定要订阅的 Publication 名称。
2. 查看 Subscription

可以使用 \dRs+ 命令或查询系统表 pg_subscription 来查看现有的订阅信息:

SELECT * FROM pg_subscription;
3. 删除 Subscription

使用 DROP SUBSCRIPTION 命令删除订阅。

DROP SUBSCRIPTION my_subscription;
4. 暂停或恢复 Subscription

使用 ALTER SUBSCRIPTION 命令可以暂停或恢复订阅,以控制是否接收发布者的数据变更。

  • 暂停订阅:

    ALTER SUBSCRIPTION my_subscription DISABLE;
  • 恢复订阅:

    ALTER SUBSCRIPTION my_subscription ENABLE;

Subscription 的选项

CREATE SUBSCRIPTION 语句中可以配置多种选项来控制如何同步数据:

  • copy_data:默认情况下,订阅会在创建时同步表中的现有数据。可以通过 WITH (copy_data = false) 来禁用这个行为,从而只接收增量变更。
  • refresh:当发布的结构发生变化时,订阅者可以刷新订阅,以确保表结构与发布者一致。
  • synchronous_commit:控制订阅的同步提交模式,用于调节复制过程中性能与数据一致性的平衡。

Subscription 应用场景

  1. 读写分离:通过订阅,主数据库发布数据变更,多个只读副本数据库订阅这些变更,以实现读写分离架构。主库承担写入操作,从库处理查询,减轻主库负载。
  2. 高可用性和灾难恢复:逻辑复制可以在不同的数据库实例之间同步数据,这对于实现高可用性和灾难恢复非常有帮助。
  3. 数据分发:通过逻辑复制,可以将数据从一个数据库发布到多个订阅者中,从而实现数据分发。
  4. 在线数据迁移:通过创建订阅,可以将一个数据库的数据迁移到另一个数据库,同时保持数据的增量同步,避免停机时间。

示例:主从同步

假设有一个发布者数据库和一个订阅者数据库,通过逻辑复制同步 my_table 表的数据。

  1. 在发布者数据库上创建 Publication:

    CREATE PUBLICATION my_publication FOR TABLE my_table;
  2. 在订阅者数据库上创建 Subscription:

    CREATE SUBSCRIPTION my_subscription CONNECTION 'host=publisher_host dbname=publisher_db user=publisher_user password=publisher_password' PUBLICATION my_publication;
  3. 订阅者会首先同步 my_table 中的数据,然后继续接收发布者的增量变更。

Subscription 与物理复制的区别

  1. 数据范围:逻辑复制通过 Publication 和 Subscription 可以选择性地复制某些表的数据,而物理复制则需要同步整个数据库实例的所有数据。
  2. 表结构灵活性:在逻辑复制中,发布者和订阅者的表结构可以不同,只要复制的列是相互兼容的;物理复制则要求主从库的结构完全一致。
  3. 数据库版本兼容性:逻辑复制可以跨不同版本的 PostgreSQL 实例复制数据,而物理复制要求主从库使用相同的 PostgreSQL 版本。

Subscription 的限制和注意事项

  • 主键要求:为了确保增量数据变更能够在订阅者数据库上正确应用,逻辑复制的表通常需要有主键或唯一约束。
  • 数据一致性:逻辑复制是异步的,因此订阅者数据库上的数据可能会稍微滞后于发布者,特别是在网络延迟或负载较高的情况下。
  • 网络连接:订阅者需要持续连接到发布者以接收数据变更,因此网络稳定性会影响同步效率。

小结

Subscription 是 PostgreSQL 逻辑复制体系中的关键部分,通过订阅发布的数据变更,能够实现数据库之间的实时数据同步。结合 Publication,Subscription 提供了灵活的数据复制机制,适用于多种场景如读写分离、分布式数据管理和数据迁移等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/881837.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode - 139双周赛

目录 一,3285. 找到稳定山的下标 二,3286. 穿越网格图的安全路径 三,3287. 求出数组中最大序列值 四,3288. 最长上升路径的长度 一,3285. 找到稳定山的下标 本题就是找[0, n-2]中,height[i]…

升级你的HarmonyOS体验:一窥功能引导与拖拽交换的独家技巧

文章目录 前言项目目录结构开发流程主要步骤讲解关键配置Index.ets 页面讲解高光组件相关HeaderApp 总结 前言 在当今的移动应用开发领域,为了提供更加友好和直观的用户体验,开发者们通常会集成多种交互功能来增强应用的互动性和易用性。在这些功能中&a…

故障诊断│GWO-DBN灰狼算法优化深度置信网络故障诊断

1.引言 随着人工智能技术的快速发展,深度学习已经成为解决复杂问题的热门方法之一。深度置信网络(DBN)作为深度学习中应用比较广泛的一种算法,被广泛应用于分类和回归预测等问题中。然而,DBN的训练过程通常需要大量的…

go 读取excel数据存储到mysql

一、安装依赖 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx 二、main.go package mainimport ("fmt""github.com/jmoiron/sqlx""log" ) import "github.com/tealeg/xlsx" import _ "github.com/go-s…

【LeetCode热题100】位运算

这篇博客先介绍了常见位运算操作,然后记录了关于位运算的几道题,包括判定字符是否唯一、丢失的数字、两整数之和、只出现一次的数字2、消失的两个数字。 在这一部分,我们不妨先来总结一下常见位运算操作: 1.基础位运算 >>…

C++——模拟实现string

1.再谈string string为什么要被设计成模板?日常使用string好像都是char*,char*不够使用吗,为什么要设计成模板呢? 1.1 关于编码 //计算机的存储如何区分呢?int main() {//比如在C语言中,有整型//如果是有…

craco-less使用问题

craco-less使用问题 问题背景 前端是用React搭建,使用craco配置,相关库或插件版本如下 "craco/craco": "^7.1.0","react-scripts": "^5.0.1","craco-less": "^3.0.1"在生产环境&#xff…

P9235 [蓝桥杯 2023 省 A] 网络稳定性

*原题链接* 最小瓶颈生成树题,和货车运输完全一样。 先简化题意, 次询问,每次给出 ,问 到 的所有路径集合中,最小边权的最大值。 对于这种题可以用kruskal生成树来做,也可以用倍增来写,但不…

国内可以使用的ChatGPT服务【9月持续更新】

首先基础知识还是要介绍得~ 一、模型知识: GPT-4o:最新的版本模型,支持视觉等多模态,OpenAI 文档中已经更新了 GPT-4o 的介绍:128k 上下文,训练截止 2023 年 10 月(作为对比,GPT-4…

SSM+vue音乐播放器管理系统

音乐播放器管理系统 随着社会的发展,计算机的优势和普及使得音乐播放器管理系统的开发成为必需。音乐播放器管理系统主要是借助计算机,通过对首页、音乐推荐、付费音乐、论坛信息、个人中心、后台管理等信息进行管理。减少管理员的工作,同时…

2024短剧系统开发,付费短剧小程序app源码教程,分销功能讲解搭建上线

短剧系统技术栈 前端:vue3uniapp 后端: php 数据库:mysql 服务器环境: centos7.6 宝塔 php7.4 MySQL5.7 一、短剧系统功能 短剧用户端: 小程序、抖音小程序、快手小程序、APP、 z付宝小程序 系统用户端详细功能&…

有关shell指令练习2

写一个shell脚本,将以下内容放到脚本中 在家目录下创建目录文件,dir dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中, 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中 …

ABAP-Swagger 一种公开 ABAP REST 服务的方法

ABAP-Swagger An approach to expose ABAP REST services 一种公开 ABAP REST 服务的方法 Usage 1: develop a class in ABAP with public methods 2: implement interface ZIF_SWAG_HANDLER, and register the public methods(example method zif_swag_handler~meta) 3: …

nonlocal本质讲解(前篇)——从滤波到Nonlocal均值滤波

线性滤波 → \rightarrow →高斯滤波 → \rightarrow →高斯滤波 → \rightarrow →双边滤波 → \rightarrow →Nonlocal均值滤波 平均 高斯 双边 Nonlocal 目录 线性滤波高斯滤波双边滤波Nonlocal均值滤波 滤波最初是频域的概念,由于频域乘积对应空域卷积&am…

药物分子生成算法综述:从生成对抗网络到变换器模型的多样化选择

创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力! 基于已有的药物数据生成新的药物分子是一项复杂的任务,通常涉及到生成模型和机器学习算法。以下是一些常用的算法和方法: 1. 生成对抗网络 (GANs) 特点: 由生成…

罗马数字详解

一. 罗马数字の背景 1. 罗马数字的诞生与进化 罗马数字起源于古罗马帝国,拥有一个漫长而复杂的历史,始于公元前 8 世纪至 9 世纪,与古罗马帝国在帕兰丁山(Palantine Hill)周围建立的时间大致相同。不过,罗…

【GUI设计】基于Matlab的图像处理GUI系统(2),matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Matlab的图像处理GUI系统(2),用matlab实现。…

jboss

一。CVE-2015-7501 1.POC,访问地址 192.168.10.193:8080/invoker/JMXInvokerServlet 返回如下,说明接⼝开放,此接⼝存在反序列化漏洞 2.下载 ysoserial ⼯具进⾏漏洞利⽤ https://github.com/frohoff/ysoserial 将反弹shell进⾏base64编码…

java重点学习-设计模式

十三 设计模式 工厂模式:spring中使用(目的是:解耦) 1.简单工厂 所有的产品都共有一个工厂,如果新增产品,则需要修改代码,违反开闭原则是一种编程习惯,可以借鉴这种编程思路 2.工厂方…

基于SpringBoot+WebSocket实现地图上绘制车辆实时运动轨迹图

实现基于北斗卫星的车辆定位和轨迹图的Maven工程(使用模拟数据),我们将使用以下技术: Spring Boot:作为后端框架,用来提供数据接口。Thymeleaf:作为前端模板引擎,呈现网页。Leaflet…