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

时间:2013-11-11 21:53:28

标签: postgresql

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

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连接
psql -h localhost (OR 127.0.0.1) -d <DB> -U user -W

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

psql -h ip_add_postmaster -d <DB> -U user -W

它抛出:

  

psql:无法连接到服务器:连接被拒绝   服务器是否在主机XXXXXX上运行并接受端口5432上的TCP / IP连接?

这里有什么问题?

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中,

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.

5 个答案:

答案 0 :(得分:16)

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

在配置中设置listen_addresses='*'即可。

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

答案 3 :(得分:0)

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

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

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

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

答案 4 :(得分:0)

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

更新Mac OS(从10.13.1 - &gt; 10.13.13)时,目录/usr/local/var/postgres/中的某些文件夹会被删除。解决方法是添加缺少的目录:

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}