我想先声明我不是 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/