【问题标题】:psql cant connect to PostgreSQL server (postmaster) on IP and port 5432?psql 无法连接到 IP 和端口 5432 上的 PostgreSQL 服务器(postmaster)?
【发布时间】:2013-11-23 20:48:00
【问题描述】:

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

【问题讨论】:

  • @nos - 是的,在客户端机器上,我确实有 /etc/hosts 条目。从客户端机器上,我可以 ssh -A OK。谢谢
  • @nos - 是的,我在 postgresql.conf 文件中使用了实际的 IP 地址。
  • 设置listen_addresses后是否重启了postgres?根据 netstat,它仅设置为 127.0.0.1。

标签: postgresql


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 手册上似乎说opposite:“该值采用逗号分隔的主机名和/或数字IP地址列表的形式。”
  • 对不起,你是对的。我做了一个快速的谷歌搜索,结果似乎是一篇不正确的文章。
  • 这里是 AWS 防火墙问题;在我的安全组上添加 PostgreSQL 端口修复了它。如果您在 AWS 上设置 PostgreSQL,这里有一个很好的教程:github.com/snowplow/snowplow/wiki/Setting-up-PostgreSQL
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这让我免于头痛。有这个确切的问题
    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

      我也遇到了同样的问题。在调试时,它与端口无关,但由于 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}
      

      【讨论】:

        猜你喜欢
        • 2019-08-15
        • 1970-01-01
        • 2018-06-22
        • 2016-11-22
        • 1970-01-01
        • 1970-01-01
        • 2014-05-10
        • 1970-01-01
        • 2013-05-19
        相关资源
        最近更新 更多