无法从远程主机连接到postgres

时间:2011-05-27 10:06:58

标签: postgresql

我有一个运行postgres的数据库服务器(192.168.1.50)。我创建了一个名为“testdb”的数据库和一个密码为“testuserpw”的用户“testuser” 在本地,我可以使用:

连接到数据库
psql -d testdb -U testuser

当我从其他主机(192.168.1.60)发出命令时:

psql -h 192.168.1.50 -d testdb -U testuser

我有错误:

psql: could not connect to server: Connection refused
Is the server running on host "192.168.1.50" and accepting
TCP/IP connections on port 5432?

有什么想法吗?

6 个答案:

答案 0 :(得分:47)

检查listen_addresses文件中postgresql.conf的设置。许多发行版使其默认为127.0.0.1,即只监听来自localhost的连接。它应设置为'*'以侦听所有接口上的连接。

如果您仍然遇到问题,请使用lsof查看postgres进程正在侦听的网络套接字。

答案 1 :(得分:6)

在Ubuntu上,我注意到远程访问在某些时候停止工作(目前使用9.1.9)。原因是,postgres不再以-i开关[1]启动,所以无论你为listen_addresses配置什么,都会被忽略。

幸运的是,将以下行添加到/etc/environment可以在注销后再次(或重新启动)时解决问题:

PGOPTIONS="-i"

有关更多选项,请参阅[2]。请注意,将此添加到/etc/postgresql/9.1/main/environment并不适用于我。

现在,在做nmap ip-of-my-remote-server时我终于得到了这个:

5432/tcp open  postgresql

耶!

[1] http://www.postgresql.org/docs/9.1/static/runtime-config-short.html

[2] http://www.postgresql.org/docs/9.1/static/libpq-envars.html

答案 2 :(得分:3)

防火墙是否允许连接通过?或者,检查pg_hba.conf是否允许从localhost以外的地址进行连接。

答案 3 :(得分:1)

postgresql.conf中的listen_address configvar不是让postgres监听非本地IP地址(或地址)的唯一方法。

如果从pg_ctl启动postgres,请使用选项“-o -h *”,否则请在postgres命令行中添加“-h”“*”,例如

/ usr / local / pgsql / bin / postgres -D / pg / data“-h”“*”

当然/ pg / data必须更改为您当前的数据路径。

这在试验时特别有用。

答案 4 :(得分:1)

我拒绝的连接已被拒绝(0x0000274D / 10061):

打开终端并输入:

VIM /var/lib/pgsql/data/postgresql.conf

编辑“ listen_adresses”,应将其设置为“ *”

enter image description here

此后,将其放在终端上:

/scripts/restartsrv_postgres

答案 5 :(得分:0)

我遇到了与您相同的问题,而我的问题根源是防火墙设置。 如果您使用的是Ubuntu,请打印防火墙状态: sudo ufw status verbose

它可能看起来像这样:

Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
...

传入连接的默认规则是“拒绝”,因此您需要指定“允许”端口。

类型: sudo ufw allow 5432/tcp

参考: https://www.vultr.com/docs/how-to-configure-ufw-firewall-on-ubuntu-14-04