psql无法连接到IP和端口5432上的PostgreSQL服务器(postmaster)?

psql cant connect to PostgreSQL server (postmaster) on IP and port 5432?

请在回复之前阅读(因为它可能会发生)。 我正在运行我的postmaster(postgres)服务器。 请参阅下面的'sudo netstat -anp | grep 5432'输出?

1
2
3
tcp  0  0 127.0.0.1:5432    0.0.0.0:*     LISTEN      29606/postmaster      
unix  2      [ ACC ]     STREAM     LISTENING     1650581 29606/postmaster /var/run/postgresql/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     1650582 29606/postmaster    /tmp/.s.PGSQL.5432

我可以使用localhost连接

1
psql -h localhost (OR 127.0.0.1) -d <DB> -U USER -W

但是当我尝试使用tcp从其他主机连接时,通过指定

1
psql -h ip_add_postmaster -d <DB> -U USER -W

它抛出:

psql: could not connect to server: Connection refused
Is the server running on host XXXXXX and accepting TCP/IP connections on port 5432?

这有什么不对?

1
2
3
4
5
6
7
8
9
10
pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

#"local" IS FOR Unix DOMAIN socket connections ONLY                  
LOCAL   ALL             ALL                                     peer  
# IPv4 LOCAL connections:                                            
host    ALL             ALL             127.0.0.1/32            md5  
# IPv6 LOCAL connections:                                            
host    ALL             ALL             ::1/128                 md5

在postgresql.conf中,

1
2
3
4
listen_addresses = 'localhost, 127.0.0.1, ip_add_postmaster'

Note: ip_add_postmaster IS same AS my Elastic IP AND NOT public DNS. IF this information
matters.

我在这做错了什么? 计算机托管在Amazon EC2上,并打开了端口5432。


正如您的netstat输出所示,它正在侦听127.0.0.1:5432,即localhost。那只能从localhost连接;)

在配置中设置listen_addresses='*',它将起作用。

[编辑]
其他要检查的事项:

  • 亚马逊防火墙阻止什么?
  • 是iptables阻止什么?

但首先要确保侦听地址正确,你的netstat输出显示它不会像这样工作。


我发现的另一个问题是如果你最终安装了两个Postgres,第二个可以选择非默认端口(在我的例子中它是5433 i / o 5432)。所以检查postgresql.conf中的端口可能是个好主意。


listen_addresses ='localhost,private_ip'解决了这个问题。我无法在弹性IP上启动postmaster服务器。一旦postgres服务器启动了localhost和私有IP,我就可以连接了。


我也遇到了同样的问题。在调试时,它与端口没有任何关系,但是由于Postgres文件夹中的一些缺少目录。

更新Mac OS(从10.13.1 - > 10.13.13)时,目录/usr/local/var/postgres/中的某些文件夹将被删除。修复是添加缺少的目录:

1
2
3
4
5
6
7
mkdir /usr/LOCAL/var/postgres/pg_tblspc
mkdir /usr/LOCAL/var/postgres/pg_twophase
mkdir /usr/LOCAL/var/postgres/pg_stat
mkdir /usr/LOCAL/var/postgres/pg_stat_tmp
mkdir /usr/LOCAL/var/postgres/pg_replslot
mkdir /usr/LOCAL/var/postgres/pg_snapshots
mkdir /usr/LOCAL/var/postgres/pg_logical/{snapshots,mappings}

我遇到了这个问题并尝试了我在SO中找到的各种修复方法,并希望添加一个简单的解决方案,在我意识到它与我的情况下的权限有关之后对我有用。

简单地说,如果您在Windows上运行psql服务器,则最初只能使用默认的postgres超级用户登录,启动服务器等。

所以,首先尝试从命令行运行:
psql -U postgres -h localhost -p 5432
并在提示符下输入您的密码。如果您已设法登录并且服务器已启动,那么这是一个权限问题。从这里,您可以为自己创建一个角色,该角色对您尝试运行的任何数据库具有登录权限。

如果错误仍然存??在,请考虑检查postgresql.conf,如上所述,以确保默认IP设置为*或localhost,并将端口设置为5432或默认情况下所需的任何端口。