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

news/2024/9/22 12:33:36 标签: oracle, 数据库

在 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.niftyadmin.cn/n/5670258.html

相关文章

【报告阅读】chatgpt-o1 技术报告阅读 | 新的迭代开始了~

OpenAI o1是通过强化学习去进行复杂推理,在它回答之前,他会经过复杂的内部思维链的思考。 经过强化训练的o1多强 1 表现 在美国数学奥林匹克预选赛中名列前500名的学生中,o1排89名 在物理、生物、化学问题的基准测试中超过人类博士水平 其…

机器学习——Stacking

Stacking: 方法:训练多个模型(可以是强模型),然后将这些模型的预测结果作为新的特征,输入到下一层新的模型(可以是多个)中进行训练,从而得到最终的预测结果。 代表:Stacking本身并没…

智能工厂的软件设计 “程序program”表达式,即 接口模型的代理模式表达式

Q1、前面将“智能工厂的软件设计”中绝无仅有的“程序”视为 专注于 给定的某个单一面(语言面/逻辑面/数学面)中的 问题,专注于分析问题和解决问题的程序活动的组织,每一面都是一个“组织者”就像一个“独角兽”,并提出…

【数据结构】线性数据结构-顺序栈

栈(Stack)是一种基本的数据结构,具有以下特点: 后进先出(LIFO, Last In First Out):栈内的数据项遵循后进先出的原则,即最后存入的项最先被取出。 操作限制:栈通常只允许…

SkyWalking 简介

SkyWalking是什么 skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用 程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。它是一款优秀的 APM(Application Performance Manag…

嵌入式常用GUI介绍

目录 前言一、GuiLite二、LVGL三、SimpleGUI四、MiniGUI五、emWin六、TouchGFX七、uGUI八、GFX九、Embedded Wizard十、CrankSoftware十一、PEG Graphics Software十二、Guiliani十三、MPLAB Harmony Graphics Suite 前言 图形用户界面(Graphical User Interface&am…

Arthas dashboard(当前系统的实时数据面板)

文章目录 二、命令列表2.1 jvm相关命令2.1.1 dashboard(当前系统的实时数据面板) 二、命令列表 2.1 jvm相关命令 2.1.1 dashboard(当前系统的实时数据面板) 使用场景: 在 Arthas 中,dashboard 命令用于提…

开源 AI 智能名片 S2B2C 商城小程序与正能量融入对社群归属感的影响

摘要:本文探讨了开源 AI 智能名片 S2B2C 商城小程序在社群运营中的作用,以及融入正能量对提高社群归属感的关键意义。通过分析正能量的精神感染力和对社群氛围的积极影响,阐述了在开源 AI 智能名片 S2B2C 商城小程序的各类活动中融入正能量的…