5

我已经在我的 Mac 上安装了Postgres 应用程序并且正在运行一个数据库。

我可以使用命令从终端连接它psql -h localhost

现在我想从同一网络上的另一台机器访问这个服务器。

当我psql -h <hostname> -U <username>从另一台机器上做时,我得到了错误

psql: could not connect to server: Connection refused
    Is the server running on host "my hostname" (xx.xx.xx.xxx) and accepting
    TCP/IP connections on port 5432?

在运行服务器的机器上,lsof -i | grep LISTEN我得到了以下结果。

postgres  3196 sudarm    5u  IPv6 0x1caf6120      0t0  TCP localhost:5432 (LISTEN)
postgres  3196 sudarm    6u  IPv4 0x14678db0      0t0  TCP localhost:5432 (LISTEN)
postgres  3196 sudarm    7u  IPv6 0x1caf6a80      0t0  TCP localhost:5432 (LISTEN)

我是否需要做任何其他事情才能从另一台机器连接到服务器?

4

1 回答 1

15

错误消息提出了正确的问题:服务器是否接受端口 5432 上的连接?您提供的lsof输出表明不,不是。PostgreSQL 正在监听localhost:5432,这意味着它只会接受来自数据库服务器本身的连接。

打开服务器的postgresql.conf,设置listen_addresses = '*',然后重新启动 PostgreSQL。然后它将侦听所有接口上的连接,从而接受网络上的连接。

从这里开始,您可能会遇到的下一个问题是身份验证。(PostgreSQL 将接受连接,但您可能没有告诉它一旦通过网络建立连接后该做什么。)确保服务器pg_hba.conf有一个匹配您的数据库/用户/源地址组合的条目——类似的东西host all all 10.0.0.0/8 md5可能是合适的-- 并根据需要重新加载 PostgreSQL 以应用更改。

md5部分告诉 PostgreSQL 尝试使用密码进行身份验证,因此如果您还没有设置密码,您还需要为相关用户设置密码。但是,您通常管理您的数据库(例如psql template1在数据库服务器上),例如ALTER USER whomever WITH PASSWORD 'your_new_password'.

于 2012-10-30T07:33:24.300 回答