【问题标题】:Cannot connect to PostgreSQL from client - Error timed out无法从客户端连接到 PostgreSQL - 错误超时
【发布时间】:2020-02-23 13:55:20
【问题描述】:

在尝试连接到我的 PostgreSQL 实例很多天后,我决定是时候寻求帮助了。

我正在尝试从 Windows 机器连接到我的 PostgreSQL 数据库。

我正在尝试 pgAdmin 4 和 dBeaver,但都无法连接。下面是我使用dBeaver连接时收到的错误截图。

我正在创建的连接是这样的:

我的用户是 (\du):

                                 List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 umberto   | Superuser, Create role, Create DB                          | {}

我的数据库 (\l):

                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges
-----------+----------+----------+---------+---------+-----------------------
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 |
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 umberto   | umberto  | UTF8     | C.UTF-8 | C.UTF-8 |
 wondermap | postgres | UTF8     | C.UTF-8 | C.UTF-8 |

不知道在哪里搜索日志以深入了解服务器计算机上的此问题。我唯一能找到的是文件夹/var/log/postgresql,在该文件夹中我只看到两个非 gzip 压缩文件,但这些消息指的是我尝试连接之前的几天。

最后,我的pg_hba.conf

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# 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
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             all             ::0/0                   md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
host    all             all             ::/0                    md5

可能是什么问题?

【问题讨论】:

  • 我认为您没有明确说过,但我认为 postgres 运行在与您连接的计算机不同的计算机上?如果是这种情况,那么很可能是防火墙或类似的连接问题,而不是 postgres。如果它被 pg_hba.conf 设置拒绝,您将不会收到超时错误。 也许 postgres 没有在预期的端口上运行或监听,但这比拒绝服务器端之间或服务器端的连接的可能性要小。
  • 是的,它在另一台机器上。我确保服务器端端口 5432 已打开。会不会是客户端防火墙?
  • 如果客户端 = 您则不,除非您阻止出站连接,这有点不寻常。从您的客户端您可以从 Microsoft 下载 portqry,然后尝试portqry -n [pg host name] -e 5432 看看结果如何。 “正在侦听”=能够访问服务器上的该端口,并且某些东西(希望是 pg)正在侦听该端口; “未监听” = 您可以访问该端口,但没有任何内容在监听(可能导致超时); “已过滤” = 访问被阻止,几乎可以肯定是由于防火墙。
  • 是的,我收到了FILTERED。感谢您的 cmets,我现在可以解决我的问题。非常感谢您的帮助,如果您愿意,可以发布您的 cmets 作为答案,我很乐意接受。干杯!
  • 非常希望它能帮助您找到确切的问题。我现在已经把它作为答案发布了。

标签: postgresql database-connection pgadmin dbeaver


【解决方案1】:

我通常不会查看 postgres 日志来解决连接超时错误,因为如果 postgres 拒绝连接,它们会立即被拒绝,而不是给你一个超时,所以如果你得到一个超时它通常意味着它从未到达 postgres,因此日志中不会有任何相关内容。

根据我的经验,连接超时错误通常是由 Windows/网络问题引起的,例如服务器上(或前面)的防火墙不允许访问端口 5432,或者实际上没有监听端口5432(可能是 postgres 实际上没有运行,或者它被配置为侦听不同的端口等)。

我最喜欢在 Windows 上解决此类连接问题的工具是 portqry。用法是portqry -n [hostname] -e [port number]。它将尝试连接到端口[port number] 上的[hostname] 并为您提供结果:

  • Listening:portqry 能够连接到指定端口上的主机,并且应用程序正在侦听该端口。这就是你想要的。
  • Not listening: portqry 能够到达指定端口上的主机,但该端口上没有任何监听。对于 postgres,这可能是因为服务没有运行,或者正在侦听不同的端口。
  • Filtered: portqry 无法访问指定端口上的主机。这意味着它实际上被阻止连接,这通常是由主机上的防火墙或客户端和主机之间的防火墙造成的,它阻止了对该端口上的主机的访问。

【讨论】:

    【解决方案2】:

    如果您将 pgadmin 托管在与 postgres 数据库相同的服务器上,请尝试在设置 pgadmin 到该数据库的连接期间将“localhost”插入服务器/主机连接字段,也可以尝试“127.0.0.1”。在排除了所有网络问题后,这对我来说很奇怪。

    【讨论】:

      【解决方案3】:

      就我而言,我试图从 AWS RDS 加载数据库。将我的 IP 地址列入白名单后,错误已解决。

      【讨论】:

        【解决方案4】:

        我得到了这个确切的错误。在向 AWS 数据库授予公共访问权限后,该问题得到了解决。可以在 AWS 控制台中查看。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-06
          • 2013-02-14
          • 1970-01-01
          • 2015-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多