如何pg_dump一个RDS Postgres数据库?

时间:2015-08-07 15:45:27

标签: database postgresql amazon-web-services

如何使用pg_dump连接到我的RDS实例?

这是实例的端点:

<long public dns thing>:5432

所以我正在运行这个命令:

pg_dump -h <long public dns thing> -p 5432 -f dump.sql

得到这个:

pg_dump: [archiver (db)] connection to database "brendan" failed:
could not connect to server: Connection refused
Is the server running on host "<long public dns thing>"
(<IP address>) and accepting TCP/IP connections on port 5432?

这是亚马逊的故障排除建议:

无法连接到Amazon RDS PostgreSQL数据库实例

尝试连接到PostgreSQL数据库实例时,最常见的问题是分配给数据库实例的安全组具有不正确的访问规则。默认情况下,数据库实例不允许访问;访问权限通过安全组授予。要授予访问权限,您必须创建自己的安全组,其中包含针对您的具体情况的特定入口和出口规则。有关为数据库实例创建安全组的详细信息,请参阅创建安全组。

最常见的错误是无法连接到服务器:连接超时。如果收到此错误,请检查主机名是否为数据库实例端点,以及端口号是否正确。检查分配给数据库实例的安全组是否具有允许通过本地防火墙进行访问的必要规则。

有没有办法从pg_dump指定我的安全组?如果是这样的话,在ssh'ing时我是否需要获取我需要ssh密钥的本地副本?

甚至尝试远程使用pg_dump是错误的吗?我应该尝试ssh到实例上,还是完全做其他事情?

1 个答案:

答案 0 :(得分:56)

步骤1:在AWS上创建一个安全组,其中列出了您计算机的IP地址。

步骤2:将该安全组添加到要连接的数据库实例。

第3步:运行pg_dump。确保使用-U命令指定您的用户名(感谢@LHWizard)。在这种情况下,我的不是'postgres',所以我猜你通常需要在aws中找到它。还要确保指定数据库的名称:在某些命令行工具中有一个-d开关,但如果你检查pg_dump的用法:

pg_dump -h <public dns> -U <my username> -f dump.sql <name of my database>

你可以看到这是一个正式的论点。 所以整个命令(在我的情况下)是:

target="_blank"

请注意,没有必要指定端口号 - 我认为因为端口5432是postgres的端口。

相关问题