将一些表从一个 postgres 数据库复制到另一个

9 postgresql replication

我有以下情况:我有三台机器运行 postgresql 数据库。一台机器保存客户端帐户信息(称为这台机器 C),另外两台机器保存客户端日志信息(称为 L1 和 L2)。拆分的原因是为了在多台机器上分开加载(所以一些客户端将日志信息发送到 L1,一些发送到 L2 ......也许还有一些时间 L3、L4,......)。

检索日志信息时,原则上我希望能够在 Ln 上的日志记录表和 C 上的客户帐户表之间进行 JOIN。实际上我不能这样做(即使我可以,我也希望以避免加载 C)。

我的想法是将 C 上的表复制到 L1、L2 中的每一个上,以便我可以进行连接。就来自 C 的表而言,C 是主表,L1、L2、... 是从表。但是对于 L1、L2 上的其他表,...这些机器是大师。它不完全是主-主复制,也不完全是主从。

是否可以说服 postgres(我正在运行 9.1)复制来执行此操作,或者如果没有其他软件包可以完成这项工作。作为最后的手段,我可​​以编写一些代码来定期同步表(我可以容忍一些延迟),但最好不要这样做!

提前致谢。

And*_*nan 3

您应该使用 dblink 和物化视图来实现此目的。这两个功能都内置于最新版本的 Postgres 中:

http://www.postgresql.org/docs/9.3/static/rules-materializedviews.html

http://www.postgresql.org/docs/9.3/static/dblink.html

本质上,您可以在每个数据库 L1、L2... 上构建一个 Mview,并使用从 C 上的表中提取的数据,然后使用 Mview 刷新根据需要定期更新 Mview。数据存储在本地,因此访问速度非常快。仅当数据相对静态并且您不介意本地数据库偶尔有稍微过时的信息时,这才适用。您应该设置刷新频率来适当地管理它,如果不可接受,那么您应该只使用数据库链接并处理由此产生的缓慢情况。

如果您需要其他功能,快照项目提供了高级功能,例如快速刷新和快照日志:

http://pgfoundry.org/projects/snapshot/

通过此功能,您可以使刷新仅更新需要更新的行,这可以使大型非弹性数据集的刷新速度变得非常快,从而最大限度地减少对应用程序的干扰。默认情况下,Mviews 被完全删除并在 Postgres 中重新创建,由于显而易见的原因,这对性能来说可能非常糟糕。