在Mac上通过网络访问postgresql服务器

时间:2012-10-30 07:17:10

标签: macos postgresql

我在Mac上安装了Postgres App,并且正在运行数据库。

我可以使用命令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)

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

1 个答案:

答案 0 :(得分:10)

错误消息询问正确的问题:服务器是否接受端口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'