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 的认证阶段,连接请求在传输层即被拒绝。以下是针对该错误的多种独立排查与修复路径:
一、验证 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/tcp 或 sudo 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、若禁用后连接成功,需在安全软件中为 postgres 或 postmaster 进程添加网络访问白名单
3、检查 Windows 系统服务管理器中,PostgreSQL 服务是否处于“正在运行”状态,且启动类型为“自动”
今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
495 收藏
-
211 收藏
-
294 收藏
-
258 收藏
-
490 收藏
-
440 收藏
-
444 收藏
-
316 收藏
-
190 收藏
-
198 收藏
-
216 收藏
-
249 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习