14

请在将其回复为重复之前阅读(因为它可能会发生)。我正在运行我的 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               

我可以使用从本地主机连接

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。

4

5 回答 5

16

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

在您的配置中设置listen_addresses='*'它会起作用。

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

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

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

于 2013-11-11T23:44:25.023 回答
4

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

于 2013-11-13T19:50:48.920 回答
4

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

于 2015-08-10T08:49:58.260 回答
0

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

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

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

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

于 2017-12-07T06:17:12.787 回答
0

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

更新 Mac OS(从 10.13.1 -> 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}
于 2018-04-05T07:33:58.110 回答