2011-05-27 92 views
28

我有一个运行postgres的数据库服务器(192.168.1.50)。我创建了一个名为“testdb”的数据库和一个名为“testuserpw”的用户“testuser”。
在本地,我可以使用连接到数据库:无法从远程主机连接到postgres

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? 

有什么想法?

回答

43

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

如果仍有问题,请使用lsof来查看postgres进程正在监听的网络套接字。

+3

需要注意的是,还有一个pg_hba.conf配置文件,您可以在其中为特定机器配置信任属性。 – OleTraveler 2011-05-27 16:06:20

+2

它必须设置为“*”。也许这会在一两分钟内拯救某个人。 – Kolyunya 2014-08-01 10:41:32

3

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

5

在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

+0

我也在Ubuntu 13.04上运行9.1.9,这一步似乎没有必要。 – 2013-08-10 18:21:39

+0

我发现我必须用单引号替换双引号,并且它在postgresql特定的环境文件中工作得很好。此外,在执行此更改后执行/etc/init.d/postgresql时,您必须实际使用“stop”和“start”(而不是简单的重新加载)。 – mdpatrick 2013-12-01 01:08:26

1

postgresql.conf中的listen_address configvar是无法得到的Postgres监听的非本地IP地址(或地址)的唯一途径。

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

在/ usr /本地/ pgsql的/ bin中/ Postgres的-D/PG /数据 “-h”, “*”

当然/ PG /数据必须改变,以当前的数据路径。

这在实验时特别有用。