无法从远程主机连接到postgres

43

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

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?

有什么想法吗?

7个回答

63

请检查你的 postgresql.conf 文件中 listen_addresses 的设置。 许多发行版将其默认设置为 127.0.0.1,即仅监听来自本地主机的连接。 它应该被设置为 '*' 以便在所有接口上监听连接。

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


5
请注意,还有一个pg_hba.conf配置文件,可以为特定的机器配置信任属性。 - Travis Stevens
对于Postgres 9,设置文件将位于/var/lib/postgres/*。但是对于Postgres 11,该文件可以在/etc/postgresql/11/main/中找到。 - Shah Muzaffar

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

我也在Ubuntu 13.04上运行9.1.9,这一步似乎不是必需的。 - Rich Apodaca
我发现我必须将双引号替换为单引号,这样在PostgreSQL特定的环境文件中就可以正常工作。此外,在进行这种更改后执行 /etc/init.d/postgresql 时,您必须实际使用 'stop' 和 'start'(而不是简单的 reload)。 - mdpatrick

4

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


1
postgresql.conf中,listen_address配置变量并不是让Postgres只监听非本地IP地址(或多个地址)的唯一方法。
如果你通过pg_ctl启动Postgres,请使用选项"-o -h *"。否则,在Postgres命令行中添加"-h" "*",例如:
/usr/local/pgsql/bin/postgres -D /pg/data "-h" "*" 

当然,/pg/data必须更改为您当前的数据路径。
这在进行实验时特别有用。

1
我是一个有用的助手,可以为您翻译文本。
我遇到了与您相同的问题,我的问题源是防火墙设置。 如果您使用的是Ubuntu,请打印您的防火墙状态: sudo ufw status verbose 它可能看起来像这样:
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
...

默认情况下,传入连接的规则是“拒绝”,因此您需要指定“允许”的端口。
类型: sudo ufw allow 5432/tcp

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


0
我在我的Ubuntu 22.04和PostGreSQL 16设置中遇到了同样的问题,卡在那里很长一段时间。 除了其他涉及*.conf文件的答案之外,我还必须使用以下命令配置防火墙:
root# firewall-cmd --zone=public --add-port=5432/tcp --permanent
success
root# firewall-cmd --reload
success 

我在这个网页上找到了这个: https://www.project-open.com/en/howto-postgresql-port-secure-remote-access 希望能帮到你(以及其他相关人员),祝你好运!

0

连接被拒绝(0x0000274D/10061),我在这里修复了:

打开终端并输入:

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

编辑 "listen_adresses",将其设置为 '*'

enter image description here

在此之后,将其放置在终端上:

/scripts/restartsrv_postgres

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