postgresql - Postgresql 逻辑副本可以拥有自己的数据库对象吗?
问题描述
我有 2 个 postgresql 12 数据库服务器,比如 A 和 B。A 是主数据库。B 由一些指向 A 的外部表和一些用这些外部表连接构建的物化视图组成。物化视图每晚刷新一次,随着数据的增加,FDW 上的刷新需要非常长的时间,因为 FDW 上的 SQL 无法并行化。我想知道是否——
- 一个逻辑副本(这使我能够只复制几个表)可以拥有一些自己的对象(在我的情况下是 mat 视图,因此刷新不必通过 FDW 拉取和连接表)
- 对于熟悉 Oracle 的 Golden Gate 的人来说,postgres 有什么类似的吗?即基于日志而不是基于触发器?开源会更好!
谢谢
解决方案
听起来逻辑复制确实是您的解决方案:
您可以使用它复制单个表,您不应该在 B 上修改这些表,否则 B 是一个普通数据库,您可以在其中拥有其他表。
逻辑复制通过解析事务日志来工作,就像你想要的那样。所以所有的数据修改都是增量复制的。
B 上的复制表将是 A 上的表的副本,因此它们物理上存在于 B 上(对于外部表,B 上没有数据,访问外部表实际上将访问 A 上的数据)。所以没有立即需要物化视图。
请注意,逻辑复制有一些限制。最值得注意的是,ALTER TABLE
其他 DDL 语句没有被复制。
推荐阅读
- design-patterns - 如何设计一个回货通知系统?
- python - 按下按钮时从 Flask 执行 shell 脚本
- python - 如何使用与列的唯一值匹配的列快速创建新数据框
- python - 我想用 Python、Pandas、Jupyter 中的另一个主表覆盖一个小表
- postgresql - 对 PostgreSQL 性能的理解
- javascript - 从格式化消息中提取字符串
- python - 等待外部函数完成内部循环
- express - 如果我在 express 中指定 app.engine,我还需要 app.set 视图引擎吗?
- python - Django ModelAdmin 不使用自定义字段方法
- vue.js - 使用vite时如何在生产环境中获取正确的静态资源路径?