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

news/2024/9/25 17:37:23/

在 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.ppmy.cn/news/1530388.html

相关文章

C++ QT程序打包,包含python环境

C QT程序打包,包含python环境 1、导出QT可执行包 首先在QTcreator中选择对应的项目,完成release版本的发布(确保调试成功) 找到生成release的文件夹所在处,将exe执行所需的附加文件一起复制到一个单独文件夹中&#…

Spring IDEA 2024 安装Lombok插件

1.简介 Lombook插件的Data标签可以自动生成类的get和set以及toString方法。 2.安装步骤 在idead设置的插件中搜索lombok插件&#xff0c;安装。 在Spring项目的pom.xml中添加依赖项 <dependency><groupId>org.projectlombok</groupId><artifactId…

Fyne ( go跨平台GUI )中文文档-小部件 (五)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

聚焦汽车智能化与电动化,亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展

抢占市场先机︱聚焦汽车智能化与电动化&#xff0c;亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展 随着汽车智能化与电动化的迅猛发展&#xff0c;汽车电子技术、车用功率半导体技术、智能座舱技术、轻量化技术/材料、软件定义汽车、EV/HV技术、测试测量技…

leetcode24. 两两交换链表中的节点,递归

leetcode24. 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;he…

【LeetCode】每日一题 2024_9_25 公司命名(字符串、乘法原理)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;公司命名 代码与解题思路 func distinctNames(ideas []string) (ans int64) {// ideas ["coffee","donuts","time","toffee"]// 根据首字母分…

开源 AI 智能名片与 S2B2C 商城小程序:嫁接权威实现信任与增长

摘要&#xff1a;本文探讨了嫁接权威在产品营销中的重要性&#xff0c;并结合开源 AI 智能名片与 S2B2C 商城小程序&#xff0c;阐述了如何通过与权威关联来建立客户信任&#xff0c;提升产品竞争力。强调了在当今商业环境中&#xff0c;巧妙运用嫁接权威的方法&#xff0c;能够…

VMWare虚拟机键盘卡顿

文章目录 环境问题解决办法参考 环境 Windows 11 家庭中文版VMware Workstation 17 ProUbuntu 24.04.1 问题 最近新入手了一台电脑台式机&#xff0c;型号是联想拯救者刃7000K&#xff0c;自带Win11家庭版。主机的CPU是第14代英特尔酷睿i9处理器&#xff0c;异构24核32线程。…