pg入门11-pg中的publications是什么

在 PostgreSQL(PG)中,Publication(发布)是逻辑复制机制中的一个概念,用于定义哪些表的数据变更(INSERTUPDATEDELETE)可以发布到订阅者(Subscribers)。它主要用于 逻辑复制,允许在不同的 PostgreSQL 实例之间同步数据表的变更,特别适合进行数据复制、分发、数据迁移等场景。

逻辑复制的基本概念

逻辑复制是 PostgreSQL 提供的机制之一,用于在主数据库和副本数据库之间复制表数据和 DML 操作。逻辑复制可以对特定的表进行精细化控制,而不必像物理复制那样对整个数据库实例进行完全的复制。

  • Publication(发布):指发布者数据库中定义的表或表的集合,这些表的数据变化会被传递给订阅者。
  • Subscription(订阅):订阅者连接到发布者并接收发布的表的数据变更。

Publication 的工作方式

  • 发布者数据库中的 Publication 定义了哪些表的哪些操作(插入、更新、删除)应该被复制。
  • 每个 Subscription 会从一个或多个 Publication 中订阅数据变更。
  • 数据变更通过逻辑流(WAL 日志)发送到订阅者数据库,订阅者会应用这些变更。

创建和管理 Publications

1. 创建一个发布

使用 CREATE PUBLICATION 命令可以创建一个发布,并指定要发布哪些表及其操作。

  • 创建一个发布,发布所有表的所有 DML 操作:

    CREATE PUBLICATION my_publication FOR ALL TABLES;
  • 创建一个发布,发布特定表的 INSERTUPDATE 操作:

    CREATE PUBLICATION my_publication FOR TABLE my_table WITH (publish = 'insert, update');
2. 添加或移除表

可以通过 ALTER PUBLICATION 添加或移除表。

  • 添加表到现有发布:

    ALTER PUBLICATION my_publication ADD TABLE another_table;
  • 从发布中移除表:

    ALTER PUBLICATION my_publication DROP TABLE my_table;
3. 删除发布

使用 DROP PUBLICATION 命令删除发布:

DROP PUBLICATION my_publication;

Publication 选项

CREATE PUBLICATION 命令中可以指定不同的选项控制哪些操作将被发布:

  • insert:发布 INSERT 操作。
  • update:发布 UPDATE 操作。
  • delete:发布 DELETE 操作。
  • truncate:发布 TRUNCATE 操作。

默认情况下,所有支持的操作都会被发布。如果你只想发布特定操作,可以使用 WITH 选项进行精细控制。

Publication 的应用场景

  • 主从复制:逻辑复制允许将数据从一个主数据库复制到多个从数据库中,每个从数据库可以独立查询和扩展。
  • 数据分发:通过发布和订阅,可以将数据变更实时地从一个数据库分发到其他多个数据库中。
  • 数据迁移:通过逻辑复制机制,可以实现在线数据迁移,避免长时间停机。

示例:逻辑复制的完整流程

假设有一个主数据库和一个从数据库,使用逻辑复制将主数据库的表 my_table 数据变更复制到从数据库中。

  1. 在主数据库上创建 Publication

    CREATE PUBLICATION my_publication FOR TABLE my_table;
  2. 在从数据库上创建 Subscription: 从数据库通过订阅发布的表来接收数据变更,使用 CREATE SUBSCRIPTION

    CREATE SUBSCRIPTION my_subscription CONNECTION 'host=master_db_host port=5432 dbname=mydb user=myuser password=mypassword' PUBLICATION my_publication;
  3. 数据同步: 在创建订阅时,PostgreSQL 会首先同步现有的数据,然后将增量的 INSERTUPDATEDELETE 操作应用到从数据库。

Publication 与物理复制的区别

  1. 灵活性:逻辑复制通过发布和订阅机制可以选择性地复制特定表的特定操作,而物理复制则只能复制整个数据库实例。
  2. 独立性:逻辑复制允许从数据库具有与主数据库不同的结构(如只复制某些表),而物理复制需要从库与主库保持完全一致。
  3. 异构复制:逻辑复制支持跨数据库实例的复制,如 PostgreSQL 版本不同的数据库之间的复制,而物理复制需要主库和从库的版本保持一致。

注意事项

  • 主键或唯一索引:为了确保复制过程的顺利进行,复制的表通常需要有主键或唯一约束,否则更新和删除操作可能无法正确应用到订阅者。
  • WAL 日志和网络流量:逻辑复制依赖于 WAL 日志的增量数据,因此需要确保发布者的 WAL 日志保留足够的时间,以便在网络延迟或中断时,订阅者能够继续接收数据。
  • 数据一致性:在某些场景下(例如网络延迟),订阅者的数据可能会比发布者稍微滞后,不过这通常是可接受的。

Publication 是 PostgreSQL 逻辑复制系统中的核心概念,它允许数据库管理员对不同数据库实例之间的数据同步进行细粒度控制。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3网络爬虫开发实战(17)爬虫的管理和部署(第一版)

文章目录 一、 Scrapyd 分布式部署1.1 了解 Scrapyd1.2 准备工作1.3 访问 Scrapyd1.4 Scrapyd 的功能1.5 ScrapydAPI 的使用 二、Scrapyd-Client 的使用2.1 准备工作2.2 Scrapyd-Client 的功能2.3 Scrapyd-Client 部署 三、Scrapyd 对接 Docker3.1 准备工作3.2 对接 Docker 四、…

Linux网络工具:用于查询DNS(域名系统)域名解析信息的命令nslookup详解

目录 一、概述 二、基本功能 1、查询域名对应的IP地址 2、查询IP地址对应的主机名 3、查询特定类型的DNS记录 三、用法 1、命令格式 2、常用选项 五、nslookup的安装 1. 打开终端 2. 更新的系统包列表 3. 安装 bind-utils 软件包 (1)对于Ce…

Vue点击按钮生成pdf文件/Vue点击按钮生成png图片

本次案例是vue的点击生成pdf文件和png格式的图片 一、生成pdf文件案例 看代码之前,我们肯定得需要看看,效果图是什么的啦,这样子才能先看看自己想要实现的效果是不是这样子的!上效果图嘿嘿嘿~ A、实现的效果图 这是页面&#…

java intellij idea开发步骤,使用指南,工程创建与背景色字体配置,快捷键

intellij idea2021 配置背景色,字体大小,主题 快捷键

JACM23 - A New Algorithm for Euclidean Shortest Paths in the Plane

前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 本文关注的问题为计算几何学中的经典问题,即「在平面上给定一组两两不相交的多边形障碍物,寻找两点…

linux设置常见开机自启动命令

本文介绍了三种开机自启的方式,重点介绍使用systemctl的方式自启动的 方式一、修改 /etc/rc.d/rc.local 文件 /etc/rc.d/rc.local 文件会在 Linux 系统各项服务都启动完毕之后再被运行。所以你想要自己的脚本在开机后被运行的话,可以将自己脚本路径加到…

C++——关联式容器(4):set和map

在接触了诸如二叉搜索树、AVL树、红黑树的树形结构之后,我们对树的结构有了大致的了解,现在引入真正的关联式容器。 首先,先明确了关联式容器的概念。我们之前所接触到的如vector、list等容器,我们知道他们实际上都是线性的数据结…

51单片机——矩阵键盘

一、矩阵键盘原理图 我们发现: P17,P16,P15,P14控制行, P13,P12,P11,P10控制列。 所以我们如果要选择第四列,只需要把整个P1先给高电位1,再把P10给低电位0。 二、代码 P10xFF; P100; if(P170){Delay(20);while(P170);Delay(20);KeyNum…

【Linux笔记】虚拟机内Linux内容复制到宿主机的Window文件夹(文件)中

一、共享文件夹 I、Windows宿主机上创建一个文件夹 目录:D:\Centos_iso\shared_files II、在VMware中设置共享文件夹 1、打开VMware Workstation 2、选择需要设置的Linux虚拟机,点击“编辑虚拟机设置”。 3、在“选项”标签页中,选择“共…

【Stm32】从零建立一个工程

这里我们创建“STM32F103”系列的文件,基于“固件库” 1.固件库获取 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 2.使用Keil创建.uvprojx文件 前提是已经下载好了“芯片对应的固件” 3.复制底层驱动代码 将固件库下的…

LeetcodeTop100 刷题总结(一)

LeetCode 热题 100:https://leetcode.cn/studyplan/top-100-liked/ 文章目录 一、哈希1. 两数之和49. 字母异位词分组128. 最长连续序列 二、双指针283. 移动零11. 盛水最多的容器15. 三数之和42. 接雨水(待完成) 三、滑动窗口3. 无重复字符的…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

上位机图像处理和嵌入式模块部署(linux小系统开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和若干年前相比较&#xff0c;现在嵌入式linux开发要简单得多。稍微贵一点的有树莓派&#xff0c;国产的有各种水果派&#xff0c;基本上都可以按照…

Google 扩展 Chrome 安全和隐私功能

过去一周&#xff0c;谷歌一直在推出新特性和功能&#xff0c;旨在让用户在 Chrome 上的桌面体验更加安全&#xff0c;最新的举措是扩展在多个设备上保存密钥的功能。 到目前为止&#xff0c;Chrome 网络用户只能将密钥保存到 Android 上的 Google 密码管理器&#xff0c;然后…

【学习笔记】STM32F407探索者HAL库开发(四)F103时钟系统配置

【学习笔记】STM32F407探索者HAL库开发&#xff08;四&#xff09;F103时钟系统配置 1 STM32F1时钟树1.1 STM32F103时钟系统图1.2 STM32F103时钟树简图1.2.1 高速部分1.2.2 低速部分 1.3 函数配置1.4 时钟输出1.5 STM32CubeMX时钟树配置F11.6 时钟系统对与嵌入式开发的重要性 1…

Spring IDEA 2024 自动生成get和set以及toString方法

1.简介 在IDEA中使用自带功能可以自动生成get和set以及toString方法 2.步骤 在目标类中右键&#xff0c;选择生成 选择Getter和Setter就可以生成每个属性对应的set和get方法&#xff0c; 选择toString就可以生成类的toString方法&#xff0c;

Linux 文件系统(下)

目录 一.文件系统 1.文件在磁盘上的存储方式 a.盘面、磁道和扇区 b.分区和分组 2.有关Block group相关字段详解 a.inode编号 b.inode Table&#xff08;节点表&#xff09; c.Data blocks&#xff08;数据区&#xff09; d.小结 二.软硬链接 1.软链接 a.软链接的创建…

数据湖 Data Lake-概述

Data Lake 1. 数据湖的定义 数据湖是一种存储系统&#xff0c;用于集中存储大量的原始数据&#xff0c;可以按数据本来的原始格式进行存储&#xff0c;用户可以在需要时提取和分析这些数据。 A data lake is a centralized repository designed to hold vast volumes of data …

OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 Harris 角点检测器。 该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs&#xff0c;对于每个像素 (…

如何将生物序列tokenization为token?

原理讲解 tokenization是自然语言处理领域非常成熟的一项技术&#xff0c;tokenization就是把我们研究的语言转换成计算机能够识别的数字——token。 在生物领域&#xff0c;如何把核苷酸或氨基酸序列tokenization成token呢&#xff1f; 我们可以使用k-mer技术&#xff1a; k-m…