postgres_fdw无法连接到Amazon RDS上的服务器

时间:2015-02-26 16:39:55

标签: postgresql amazon-web-services amazon-rds postgres-fdw

我在RDS中有两个Postgres 9.3.5实例,它们都在一个安全组中,允许来自安全组内的所有入站流量和所有出站流量。我正在尝试设置一个数据库,以便能够通过postgres_fdw从另一个表中选择几个表。

我已经创建了服务器 -

create server master 
foreign data wrapper postgres_fdw 
OPTIONS (dbname 'main', 
         host 'myinstance.xxxxx.amazonaws.com');

以及必要的用户映射和外表 -

create foreign table condition_fdw (
    cond_id integer,
    cond_name text
) server master options(table_name 'condition', schema_name 'data');

然而,一个简单的select count(*) from condition_fdw给了我

ERROR:  could not connect to server "master"
DETAIL:  could not connect to server: Connection timed out
        Is the server running on host "myinstance.xxxxxx.amazonaws.com" (xx.xx.xx.xx) and accepting
        TCP/IP connections on port 5432?

我可以通过psql从EC2实例连接到这两个数据库。我知道直到最近RDS不支持postgres_fdw,但我正在运行更新的版本。

在创建服务器语句中,我尝试用它解析的IP地址替换“myinstance.xxxxxx.amazonaws.com”,没有运气。

有什么想法吗?

进一步测试

我在具有相同安全组的ec2实例上安装了postgres,主服务器的外部表按预期运行。

同一RDS实例上的数据库之间的postgres_fdw有效。

这一切都让我觉得在Postgres RDS实例上postgres_fdw的传出连接必定存在问题。

4 个答案:

答案 0 :(得分:0)

似乎亚马逊不允许来自RDS实例的传出连接,因此直到在RDS实例中使用postgres_fdw进行更改是不可能的。我必须运行ec2实例作为我的postgres服务器才能将外表用于另一台服务器上的数据库。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html

答案 1 :(得分:0)

我遇到了类似的问题,发现当主和远程实例位于同一可用区时,postgres_fdw只能在EU-WEST-1 RDS区域工作,而9.3.5,如果你越过AZ则不会连接。我的安全组只有5432 TCP入站和所有出站。

答案 2 :(得分:0)

如果您位于同一可用区,则没有理由不这样做。

答案 3 :(得分:0)

要让postgres_fdw在AWS RDS(带有VPC)的两个实例之间工作,我必须:

  1. 启用custom_dns_resolution https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html#Appendix.PostgreSQL.CommonDBATasks.CustomDNS
  2. 在“安全性”组的入站规则中添加查询数据库的公共IP,或将RDS实例的内部IP添加为服务器主机。 https://forums.aws.amazon.com/thread.jspa?threadID=235154

第一个文件被很好地记录了下来,但是直到绊倒第二个文件,我才能使它工作。