首页 > 解决方案 > Postgresql 逻辑副本可以拥有自己的数据库对象吗?

问题描述

我有 2 个 postgresql 12 数据库服务器,比如 A 和 B。A 是主数据库。B 由一些指向 A 的外部表和一些用这些外部表连接构建的物化视图组成。物化视图每晚刷新一次,随着数据的增加,FDW 上的刷新需要非常长的时间,因为 FDW 上的 SQL 无法并行化。我想知道是否——

  1. 一个逻辑副本(这使我能够只复制几个表)可以拥有一些自己的对象(在我的情况下是 mat 视图,因此刷新不必通过 FDW 拉取和连接表)
  2. 对于熟悉 Oracle 的 Golden Gate 的人来说,postgres 有什么类似的吗?即基于日志而不是基于触发器?开源会更好!

谢谢

标签: postgresql

解决方案


听起来逻辑复制确实是您的解决方案:

  • 您可以使用它复制单个表,您不应该在 B 上修改这些表,否则 B 是一个普通数据库,您可以在其中拥有其他表。

  • 逻辑复制通过解析事务日志来工作,就像你想要的那样。所以所有的数据修改都是增量复制的。

  • B 上的复制表将是 A 上的表的副本,因此它们物理上存在于 B 上(对于外部表,B 上没有数据,访问外部表实际上将访问 A 上的数据)。所以没有立即需要物化视图。

请注意,逻辑复制有一些限制。最值得注意的是,ALTER TABLE其他 DDL 语句没有被复制。


推荐阅读