postgresql - 如何将多个 postgres 数据库中的只读副本创建到单个数据库中?

标签 postgresql replication multi-master-replication

我想先声明我不是 DBA,对于技术知识方面的任何空白,我们深表歉意。

我在微服务架构中工作,我们有大约十几个应用程序,每个应用程序都由其 Postgres 数据库实例支持(如果有帮助,它位于 RDS 中)。每个微服务的数据库都包含一些表。可以安全地假设任何模式/表之间没有命名冲突,并且数据库之间没有任何数据分片。

我们不断遇到的问题之一是想要跨数据库分析/连接数据。现在,我们依赖于缓存数据的第 3 方工具,并可以跨多个数据库源进行查询(通过共享缓存)。

是否可以从我们所有的生产数据库创建模式/表的只读副本,并让它们可用于在单个数据库中进行查询?

是否有任何其他方法来配置 Postgres 或 RDS 以实现跨数据库的连接?

最佳答案

Is it possible to create read-replicas of the schemas/tables from all of our production databases and have them available to query in a single database?

是的,这是可能的,而且实际上很容易。

设置一个作为主服务器的 Postgres 服务器。

为每个远程服务器创建一个 foreign server然后你再使用创建一个foreign table这使得可以从主服务器访问数据。

如果您在多个服务器中有多个表,这些表在主服务器中应被视为一个表,您可以设置继承以使所有这些表看起来像一个表。如果您可以定义一个“分片”键来标识这些服务器之间的不同属性,您甚至可以让 Postgres 仅从特定服务器请求数据。

所有外部表都可以像本地表一样连接。根据查询的类型,一些(或很多)过滤器和连接条件甚至可以下推到远程服务器以分发工作。

作为Postgres Foreign Data Wrapper是可写的,您甚至可以从主服务器更新远程表。

如果远程访问和连接太慢,您可以基于远程表创建物化 View 来创建数据的本地副本。然而,这意味着它不是实时副本,您必须管理表的定期刷新。

其他(更复杂的)选项是 BDR项目或pglogical .似乎逻辑复制将内置到 next Postgres 中版本(将于今年年底发布)。

或者您可以使用像 Postgres-XL 这样的分布式、无共享系统(这可能是设置和维护起来最复杂的系统)

关于postgresql - 如何将多个 postgres 数据库中的只读副本创建到单个数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42518870/

相关文章:

postgresql - 我如何模仿postgresql中的php urldecode函数?

postgresql - 在 PostgreSQL 中删除跨表的链接数据

MySQL主主复制自增问题及解决逻辑

MySQL 自定义复制

mysql - 如何在 CentOS 6 中为 MariaDB Galera 集群配置多主复制

ruby-on-rails - 基于多个关联的 ActiveRecord 查询项

postgresql - 如何在 Postgresql 中创建多列 GiST 索引

sql - 我可以在带有 rowguid() 字段的合并复制中使用 NOT FOR REPLICATION 吗?

mongodb - MongoDB 如何同时进行分片和复制?

mysql - 如何获取多主复制中所有主服务器的更新和更改?