我在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)
我是否还需要做其他事情才能从另一台机器连接到服务器?
答案 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'
。