登录
首页 >  文章 >  常见问题

PostgreSQL连接被拒绝解决方法

时间:2026-05-10 11:46:46 444浏览 收藏

当遇到 PostgreSQL 的 “could not connect to server: Connection refused” 错误时,真正的问题往往并非广为误解的 pg_hba.conf 权限配置,而是连接请求在抵达数据库认证流程前就已失败——这通常意味着服务未运行、未监听指定地址和端口、被防火墙拦截、客户端参数错误,或受安全软件阻断;本文系统梳理了五大关键排查维度,从验证服务状态、检查监听配置、放行防火墙规则、核对连接参数到识别安全软件干扰,帮你快速定位并解决根本原因,让连接重归稳定可靠。

PostgreSQL报could not connect to server: Connection refused是pg_hba.conf的问题吗?

如果您尝试连接 PostgreSQL 数据库,但收到 could not connect to server: Connection refused 错误,则该问题通常与 pg_hba.conf 的配置无关。此错误表明客户端根本未到达 PostgreSQL 的认证阶段,连接请求在传输层即被拒绝。以下是针对该错误的多种独立排查与修复路径:

一、验证 PostgreSQL 服务是否正在运行

“Connection refused”最常见原因是数据库进程未启动,导致操作系统无监听套接字响应 TCP 连接请求。必须首先确认服务处于活动状态。

1、在 Linux 系统上执行:sudo systemctl status postgresql

2、若显示 inactive (dead) 或未找到服务单元,运行:sudo systemctl start postgresql

3、对于非 systemd 环境(如某些容器或旧发行版),改用:pg_ctl -D /var/lib/postgresql/data status(路径需根据实际数据目录调整)

二、检查 PostgreSQL 是否监听目标端口和地址

即使服务运行,若未在预期 IP 和端口上绑定监听套接字,连接仍会被操作系统内核直接拒绝。pg_hba.conf 在此阶段尚未参与处理。

1、在数据库服务器本地执行:sudo ss -tlnp | grep :5432(将 5432 替换为您实际使用的端口)

2、若输出为空,或仅显示 127.0.0.1:5432 而您正从远程连接,则需修改 postgresql.conf 中的 listen_addresses 参数

3、将 listen_addresses = 'localhost' 改为 listen_addresses = '0.0.0.0' 或指定网卡 IP,并确保 port = 5432 与客户端一致

4、修改后必须重启服务:sudo systemctl restart postgresql

三、确认防火墙未拦截目标端口

操作系统级防火墙可能丢弃发往 PostgreSQL 端口的 SYN 包,使客户端收不到任何响应,表现为 Connection refused。

1、检查当前防火墙规则:sudo ufw status verbose(Ubuntu/Debian)或 sudo firewall-cmd --list-all(RHEL/CentOS)

2、若 5432 端口未在允许列表中,执行:sudo ufw allow 5432/tcpsudo firewall-cmd --add-port=5432/tcp --permanent && sudo firewall-cmd --reload

3、在云环境(如阿里云、AWS)中,还需检查安全组规则是否放行对应端口和源 IP 段

四、排除客户端连接参数错误

客户端指定的主机名或端口号与服务实际监听配置不匹配,会导致连接尝试发送至错误地址,自然被拒绝。

1、确认连接字符串中的 host 值:若连接本地服务,使用 127.0.0.1 而非 localhost(后者可能触发 Unix domain socket,而服务未启用)

2、确认端口号完全一致:检查应用配置、JDBC URL、psycopg2.connect() 参数中的 port 是否与 postgresql.conf 中定义的 port 数值相同

3、在客户端机器上执行:telnet 127.0.0.1 5432(Linux/macOS)或 Test-NetConnection 127.0.0.1 -Port 5432(PowerShell),观察是否返回 Connected

五、检查是否被安全软件拦截

部分终端安全软件(如火绒、360、Windows Defender 防火墙)可能主动阻止 PostgreSQL 进程监听网络端口,尤其在非标准安装路径或首次运行时。

1、临时禁用本地杀毒软件及系统防火墙,再次尝试 telnet 测试

2、若禁用后连接成功,需在安全软件中为 postgrespostmaster 进程添加网络访问白名单

3、检查 Windows 系统服务管理器中,PostgreSQL 服务是否处于“正在运行”状态,且启动类型为“自动”

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>