我有一个运行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?
有什么想法吗?
答案 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”,应将其设置为“ *”
此后,将其放在终端上:
/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