不能从客户端连接到PostgreSQL数据库 - 错误超时。

8

我尝试连接我的PostgreSQL实例已经有很多天了,现在决定寻求帮助。

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

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

enter image description here

我创建的连接如下:

enter image description here

我的用户是 (\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,但我只看到了两个非gzipped文件,而且这些消息都是指向连接尝试之前的几天。

最后是我的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

可能会出现什么问题?

1
我认为你没有明确说明,但我理解你连接的机器和运行Postgres的机器不同?如果是这种情况,那么最有可能是防火墙或类似的连接问题,而不是Postgres本身的问题。如果被pg_hba.conf设置拒绝,你不会得到超时错误。也许Postgres没有在预期端口上运行或侦听,但这比在服务器端或之间拒绝连接的情况要少见。 - 404
是的,它在不同的机器上。我确认服务器端口5432已经打开。可能是客户端防火墙的问题吗? - umbe1987
1
如果客户端是您,则不会,除非您阻止出站连接,这可能有点不寻常。从您的客户端,您可以从 Microsoft 下载 portqry,然后尝试 portqry -n [pg 主机名] -e 5432 并查看结果。 "Listening" = 能够访问服务器上的该端口并且某些东西(希望是 pg)正在侦听该端口; "Not listening" = 您能够访问该端口,但没有任何内容在侦听它(可能会导致超时); "Filtered" = 访问被阻止,几乎肯定是由于防火墙。 - 404
是的,我已经被“过滤”了。感谢您的评论,现在我能够解决我的问题了。非常感谢您的帮助,如果您愿意,您可以将您的评论发布为答案,我将很乐意接受它。干杯! - umbe1987
希望这能帮助您找到确切的问题。我现在已经将其发布为答案。 - 404
5个回答

10
通常针对连接超时错误,我不会查看Postgres日志,因为如果Postgres拒绝连接,它们将立即被拒绝,而不是给您一个超时错误。因此,如果出现超时错误,通常意味着它从未到达Postgres,因此日志中将没有相关内容。
根据我的经验,连接超时错误通常是由于Windows/网络问题引起的,例如服务器上(或前面)的防火墙不允许在5432端口上进行访问,或者实际上没有任何服务在5432端口上监听(可能是因为Postgres实际上没有运行,或者它被配置为侦听不同的端口等)。
在Windows上,我最喜欢用于解决这些连接问题的工具是portqry。使用方法是portqry -n [hostname] -e [port number]。它将尝试连接到[hostname]和端口[port number],并给您结果:
- Listening:portqry能够连接到指定端口上的主机,并且有应用程序在该端口上监听。这是您想要的结果。 - Not listening:portqry能够到达指定端口上的主机,但是没有服务在该端口上监听。在Postgres的情况下,这可能是因为服务未运行或正在侦听不同的端口。 - Filtered:portqry无法连接到指定端口上的主机。这意味着其实被阻止连接,通常是由于主机或客户端和主机之间的防火墙阻止了对该端口上主机的访问。

2

在我的情况下,我试图从AWS RDS加载数据库。在将我的IP地址加入白名单后,错误得到了解决。


1
如果您将pgadmin托管在与postgres数据库相同的服务���上,请尝试在设置pgadmin连接到该数据库时,在服务器/主机连接字段中插入“localhost”,也可以尝试“127.0.0.1”。在排除所有网络问题后,这是奇怪地为我工作的方法。

0

在这里添加另一个解决方案。在此之前,我想澄清一下,我正在使用带有Xfce的Rocky Linux作为主机,Windows 10作为客户端。所以我遇到了同样的问题,我做的是:

  • 在主机上,转到网络(任务栏)>右键单击>编辑连接
  • 双击您的机器所在的连接。
  • 在“常规”选项卡中,检查防火墙区域,然后将其更改为“受信任”,然后保存。

现在这解决了我的问题,希望能帮到有需要的人。


0

我遇到了完全相同的错误。在授予 AWS 数据库公共访问权限后,问题得到了解决。可以在 AWS 控制台中进行检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接