Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql postgres_fdw无法连接到Amazon RDS上的服务器_Postgresql_Amazon Web Services_Amazon Rds_Postgres Fdw - Fatal编程技术网

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

Postgresql postgres_fdw无法连接到Amazon RDS上的服务器,postgresql,amazon-web-services,amazon-rds,postgres-fdw,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'); 以及必要的用户映

我在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');
然而,一个简单的
从条件_fdw
中选择count(*)给了我

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?
我可以通过EC2实例通过psql连接到这两个数据库。直到最近,我才知道RDS还不支持postgres_fdw,但我正在运行更新的版本

在CREATESERVER语句中,我尝试用解析到的IP地址替换“myinstance.xxxxxx.amazonaws.com”,但没有成功

有什么想法吗

进一步测试 我在一个具有相同安全组的ec2实例上安装了postgres,主服务器的外部表的行为符合预期

同一RDS实例上的数据库之间的postgres_fdw工作


这一切让我认为,在我的postgres RDS实例上,来自postgres_fdw的传出连接一定存在一些问题。

亚马逊似乎不允许来自RDS实例的传出连接,因此,在这之前,在RDS实例之间使用postgres_fdw进行更改是不可能的。我必须运行一个ec2实例作为我的postgres服务器,以便使用另一台服务器上的数据库的外部表


我遇到了类似的问题,并发现postgres_fdw仅在主实例和远程实例位于同一可用性区域以及9.3.5版本时在EU-WEST-1 RDS区域工作,如果您跨越AZs,它将无法连接。我的安全组为5432 TCP inbound only and all outbound。

如果您处于同一可用性区域,那么它没有理由不工作。

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

  • 启用
    自定义\u dns\u解析
  • 将查询数据库的公共IP添加到安全组的入站规则中,或者将RDS实例的内部IP添加为服务器主机
    第一个文件记录得很好,但我在遇到第二个文件之前无法让它工作。

    我遇到了确切的问题。我注意到,如果我向所有人开放5432,它就会工作。我不想这样做,我想从入站的角度理解我必须打开什么@BradRuderman I能够使用create server命令选项中的
    host'localhost'
    在同一RDS实例上的数据库之间进行查询。如果您使用的是
    host'myinstance.xxxxxxx.amazonaws.com
    ,您将得到一个超时,正如您所描述的那样。奇怪的是,编辑入站连接规则起到了帮助作用,因为无论安全组规则是什么,RDS的出站连接都是不允许的。@BradRuderman,我刚刚尝试了同样的事情,fdw连接似乎只有在我向所有人打开5432时才起作用,这太糟糕了……如果我尝试将某个服务器列入白名单,那么只有某个服务器不起作用?你找到办法了吗?这真的对你有用吗?不是同一实例上的两个dbs,或者EC2实例上的postgres,而是两个独立的RDS实例?您通过了
    主机XYZ.eu-west-1.rds.amazonaws.com
    或类似的
    创建服务器
    ?我刚刚尝试了这个,但无法让它工作,即使在同一个AZ中,打开入站5432到0.0.0.0/0,我想是因为@pail提到的:amazon说他们阻止了RDS实例的所有出站网络连接。你链接的文档没有说任何不允许出站连接的内容。这是完全可能的(我们正在使用它)。您不能使用DB安全组和VPC安全组。似乎这不再是事实: