连接被拒绝 - 服务器是否在本地运行并且正在接受

时间:2017-12-15 19:46:59

标签: macos postgresql pg-hba.conf

所以我在尝试连接OSX上的Postgres实例时遇到错误。

我收到此错误:

 Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

我跑了这个:

ps -ax | grep postgres 

得到这个:

 7782 ??         0:00.06 /usr/local/opt/postgresql@9.6/bin/postgres -D /usr/local/var/postgresql@9.6
 7786 ??         0:00.00 postgres: checkpointer process     
 7787 ??         0:00.01 postgres: writer process     
 7788 ??         0:00.00 postgres: wal writer process     
 7789 ??         0:00.00 postgres: autovacuum launcher process     
 7790 ??         0:00.00 postgres: stats collector process     
 7794 ttys000    0:00.00 grep postgres

/tmp/.s.PGSQL.5432存在,虽然它有“守护进程”组,而不是其他任何有“轮子”的组。

我通过brew设置了Postgres 9.6。

导致这种情况的原因是什么?

我的pg_hba.conf看起来像这样:

host  all  all  0.0.0.0/0  trust
hostnossl    all          all            0.0.0.0/0  trust

导致这种情况的原因是什么?

这是postgres日志所说的:

2017-12-15 19:40:37 UTC LOG:  database system was shut down at 2017-12-15 19:40:32 UTC
2017-12-15 19:40:37 UTC LOG:  MultiXact member wraparound protections are now enabled
2017-12-15 19:40:37 UTC LOG:  database system is ready to accept connections
2017-12-15 19:40:37 UTC LOG:  autovacuum launcher started

我只是没有看到可能导致这种情况的任何事情。

完整的pg_hba.conf:

#
# This file controls: which hosts are allowed to connect, how clients
# are authenticated, which PostgreSQL user names they can use, which
# databases they can access.  Records take one of these forms:
#
# local      DATABASE  USER  METHOD  [OPTIONS]
# host       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
# hostssl    DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
# hostnossl  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
#
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# Default:
# Added by ansible
# Added by ansible
host  all  all  0.0.0.0/0  trust
hostnossl    all          all            0.0.0.0/0  trust
local  all  all    trust
# Password hosts

# Trusted hosts

# User custom

1 个答案:

答案 0 :(得分:4)

该问题与pg_hba.conf无关,因为您的连接尝试被操作系统拒绝 - PostgreSQL服务器尚未涉及。

要检查的一些事项:

  1. 您知道对于UNIX域套接字连接客户端和服务器必须在同一台机器上,对吗?

  2. 套接字权限:

    ls -l /tmp/.s.PGSQL.5432
    

    我不知道OSX是否忽略了UNIX域套接字的权限,但如果没有,用户需要对套接字具有读写权限才能连接到它。

    如果出现问题,请调整PostgreSQL参数unix_socket_permissions并重新启动。

    (当然,它也可能缺少/tmp的权限,但如果这是错误的,很多事情应该停止在这台机器上工作。)

  3. 您使用的是正确的套接字吗?

    列出postmaster正在收听的套接字

    lsof -p 7782 | grep PGSQL
    

    此处,7782是邮局主管的进程ID。

    PostgreSQL参数unix_socket_directories确定套接字的创建位置。