无法从客户端连接到PostgreSQL-错误超时

gopyfrb3  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(5)|浏览(462)

经过许多天我试图连接到我的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

有什么问题吗?

gdx19jrr

gdx19jrr1#

我通常不会查看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无法访问指定端口上的主机。这意味着它实际上被阻止连接,这通常是由主机上或客户端和主机之间的防火墙引起的,这阻止了对该端口上的主机的访问。
3ks5zfa0

3ks5zfa02#

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

zvokhttg

zvokhttg3#

如果你把你的pgadmin和你的postgres数据库放在同一台服务器上,在你的pgadmin连接到那个数据库的过程中,试着在服务器/主机连接字段中插入“localhost”,也试着“127.0.0.1”。在排除了所有网络问题之后,这对我来说很奇怪。

pb3s4cty

pb3s4cty4#

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

m1m5dgzv

m1m5dgzv5#

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

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

现在解决了我的问题,希望它能帮助到别人。

相关问题