当前位置: 首页 > article >正文

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.kler.cn/a/320853.html

相关文章:

  • Ubuntu VNC Session启动chromium和firefox报错
  • 一个win32 / WTL下多线程库(CThread类)的使用心得
  • FPGA使用Verilog实现CAN通信
  • lua-lru缓存算法解析
  • 基于PHP技术的校园站的设计与实现
  • 【Vitepress报错】Error: [vitepress] 8 dead link(s) found.
  • SpringBoot整合Lombok插件与使用说明
  • 微信小程序showLoading ,showToast ,hideLoading连续调用出现showLoading 不关闭的情况记录
  • SpringDoc OpenApi学习笔记
  • GO Ants 学习
  • C++——将数组a[5]={-1,2,9,-5,7}中小于0的元素置成0。并将其结果输出(要求:用数组名作为函数的参数来实现)
  • C++游戏
  • Linux部署python web项目Flask + gunicorn + nginx
  • 《经典图论算法》约翰逊算法(Johnson)
  • 前端插件开发用什么技术比较好,用来程序自动化下载
  • TypeScript 设计模式之【单例模式】
  • [每日一练]修复表中的名字
  • Dependency Check:一款针对应用程序依赖组件的安全检测工具
  • ACM MM24 | Hi3D: 3D生成领域再突破!新视角生成和高分辨率生成双SOTA(复旦智象等)
  • Java 编码系列:异常处理与自定义异常
  • 一些广泛认可的编程工具,在不同的方面帮助我们提升效率
  • 使用cmd命令窗口操作mongodb
  • Scikit-LearnTensorFlow机器学习实用指南(三):一个完整的机器学习项目【下】
  • mask2former训练自定义数据集
  • Leetcode算法基础篇-位运算
  • 架构师论文备考-论软件系统架构评估