我的任务是使用 Amazon RDS 上的 Postgres 进行两次概念验证,一次使用postgres_fdw
BDR,另一次使用 BDR(双向复制扩展名)。经过网上多次搜索,似乎不可能在 RDS 上 执行replication
或设置。postgres_fdw
然而,互联网上有人(我找不到参考资料)提到 EC2 是一种可能的方式Postgres 外部数据包装器甚至从 Postgres DB 构建复制,我们称之为Frankfurt
,以连接到我们将称为的第二个 Postgres 实例Seoul
。
有人可以确认设置postgres_fdw
并且BDR
可以在 EC2 中设置吗?
谢谢。
答案1
EC2 提供了一个独立的 VM。只要 BDR 不需要对硬件的特权访问(它不需要),您就设置好了。
相比之下,RDS 提供的托管数据库服务提供了 Postgres 功能的子集。正如您所发现的,一旦您需要 RDS 不提供的功能,下一步通常是在 EC2 上运行您自己的数据库。请注意,现在您可以处理备份、复制、安排维护、将更新应用于底层操作系统、管理数据库运行的实例等等。
答案2
我们在 AWS RDS 中使用postgres_fdw
。存在一些与性能相关的问题,但它可以正常工作。您只需要使用 PostgreSQL 9.3 或更高版本并检查它postgres_fdw
是否在rds.extensions
参数组中。
Frankfurt
按照您的定义,我们有一个带有外部服务器的数据库Seoul
。连接到时,您可以像访问本地表一样Frankfurt
访问数据。Seoul
您需要在 DB 上运行类似这样的操作Frankfurt
(当然要确保两个 DB 可以通过 VPC 相互访问,不需要向所有人开放它们):
CREATE EXTENSION postgres_fdw;
CREATE SERVER FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'seoul_host_address', port '5432', dbname 'seoul_db_name');
-- maybe you need this (if you want to map users)
CREATE USER MAPPING FOR public SERVER
seoul OPTIONS (user 'seoul-writer', password 'XXXXXXX');
-- then just create foreign table
CREATE FOREIGN TABLE table_name (
id integer DEFAULT NOT NULL,
name character varying(64)
) SERVER seoul OPTIONS (tablename 'seoul_table_name');
这不是复制的完美解决方案。如果您只需要只读副本 - 使用 AWS RDS 复制,就不会有问题。
希望这些信息能够有所帮助。