PostgreSQL: 使用psql命令远程连接Postgres实例

131
我想远程连接到一个 Postgres 实例。我知道我们可以使用 psql 命令并传递主机名来实现这一点。
我尝试了以下内容:
psql -U postgres -p 5432 -h hostname

我修改了目标机器上的 /etc/postgresql/9.3/main/pg_hba.conf 文件,以默认情况下允许远程连接。

我在文件中添加了以下行:

host all all source_ip/32 trust

我使用以下命令重新启动了集群

pg_ctlcluster 9.2 mycluster stop
pg_ctlcluster 9.2 mycluster start

然而,当我尝试从源IP连接时,仍然遇到错误

该服务器是否运行在主机“”上,并在端口5432上接受TCP/IP连接?

我错在哪里了?


PostgreSQL服务器运行在哪个操作系统上? - klin
2
请检查您的防火墙设置,确保端口5432已打开以接受连接。 - Dmitry S
假设您的客户端机器有 ssh,您也可以尝试通过设置 ssh 隧道来连接远程 postgres,就像连接本地主机一样:ssh -L 5432:localhost:5432 your_server_ip,然后以与连接本地数据库相同的方式进行连接。这可以帮助调试。 - jangorecki
1
默认情况下,PostgreSQL仅侦听本地主机(许多发行版保持此默认设置不变)。将listen_addresses的值调整为“*”,以使PostgreSQL侦听您的计算机具有的所有地址。 - Eelke
1
请点击以下链接查看有关如何配置PostgreSQL以允许远程连接的内容:https://blog.bigbinary.com/2016/01/23/configure-postgresql-to-allow-remote-connection.html - Reza Abbasi
显示剩余9条评论
6个回答

145

我使用以下选项解决了这个问题:

  1. 向您的网络团队白名单中添加您的数据库主机,以确保您可以访问远程主机。
  2. 安装 PostgreSQL 版本 4 或更高版本。
  3. 运行以下命令:
  4. psql -h <REMOTE HOST> -p <REMOTE PORT> -U <DB_USER> <DB_NAME>
    

2
我使用 ElephantSql,以下命令可行:psql -h <surus.db.elephantsql.com> -U <user>。在免费版本中,主机可能会更改,然后我必须添加密码,该密码与 URL 字符串中的用户以冒号分隔。 - Timo

64
psql -h <IP_Address> -p <port_no> -d <database_name> -U <DB_username> -W

-W 选项将提示输入密码。例如:

psql -h 192.168.1.50 -p 5432 -d testdb -U testuser -W

对我来说,它也在没有 -W 选项的情况下提示了密码。 - omerhakanbilici

25

我找到解决方法了。

必须在postgresql.conf中设置listen_addresses='*',以允许来自任何IP /所有IP的传入连接。


3
这是一个安全问题,还是被视为正常做法? - Ben
3
@Ben 一般来说,应该只允许特定的IP地址连接到psql实例。 - Abdus
1
@Ben,你应该使用防火墙来限制对你的Postgres实例的访问。在我看来,Postgres内部的防火墙是多余的。 - Alexander Suraphel

7
如果你想使用一个postgres的URL,你可以像这样做:
psql postgres://user:password@ip_add_or_domain:port/db_name

1
以下是逐步说明:
  1. 打开端口 - 确保 PSQL 端口对所有远程连接或特定一组 IP 地址开放,根据您的要求。一般情况下,PSQL 运行在 5432 端口,并且可以进行配置,因此相应地公开相关端口。
  2. 更新远程服务器 PSQL 配置 - 在 postgresql.conf 文件中设置 listen_addresses = '*',路径通常为 /etc/postgresql/psql_version/main/postgresql.conf
  3. 远程连接 - psql -U <db_username> -h <IP_address> - 如果 psql 在远程服务器上运行的端口不是 5432,则通过添加 -p <port_number> 指定端口
以下是额外的信息 - 如果将 IP 映射到域名,则可以通过将 <IP_address> 替换为 <host_name> 进行连接。要执行此操作,请在 pg_hba.conf 文件中添加新的连接规则。
注意 - 上述所有内容都可能导致安全问题 - 最佳实践是要么关闭您的psql端口,要么只允许一组IP通过该端口连接。

0
请注意,pg_hba.conf中的“ident”需要在客户端上运行“ident server”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接