psycopg2连接报错:localhost主机5432端口是否运行服务并接受TCP/IP连接?
psycopg2连接PostgreSQL报错Connection refused排查方案
完整报错信息:
psycopg2.OperationalError: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?
你贴的两段代码为psycopg2的标准连接逻辑,本身无语法错误,报错根源是程序无法和PostgreSQL服务建立TCP连接,按以下步骤逐一排查即可:
1 确认PostgreSQL服务运行状态
- Windows系统:按下Win+R输入
services.msc打开服务管理器,查找postgresql开头的服务,确认状态为正在运行,未启动则右键手动启动即可。 - macOS系统:终端执行
brew services list,查看postgresql状态是否为started,未启动执行brew services start postgresql。 - Linux(Debian/Ubuntu为例):终端执行
sudo systemctl status postgresql,若状态为inactive,执行sudo systemctl start postgresql启动服务,如需开机自启追加执行sudo systemctl enable postgresql。
2 确认PostgreSQL监听配置
找到PostgreSQL的主配置文件postgresql.conf,不同系统常见路径如下:
- Linux:
/etc/postgresql/[版本号]/main/postgresql.conf - macOS(brew安装):
/usr/local/var/postgres/postgresql.conf或/opt/homebrew/var/postgres/postgresql.conf - Windows:安装目录下的data文件夹内
打开文件后修改两项配置:
- 找到
listen_addresses,确认值为'localhost'、'127.0.0.1'或'*',若为注释状态取消注释并修改后保存。 - 找到
port配置项,确认监听端口和你代码中config.DB_PORT的取值一致,默认端口为5432,如有修改需同步更新代码配置。
配置修改后重启PostgreSQL服务生效。
3 确认端口未被拦截
- 本地测试可先临时关闭系统防火墙,再次尝试连接,若连接成功说明防火墙拦截了5432端口,添加端口放行规则即可。
- 若连接远程服务器上的PostgreSQL,还需确认服务器安全组的入站规则放行了本地IP对5432端口的访问。
4 确认访问权限配置
在postgresql.conf同级目录下找到pg_hba.conf文件,打开后确认本地访问规则存在以下配置:
# IPv4本地连接规则 host all all 127.0.0.1/32 scram-sha-256 # IPv6本地连接规则 host all all ::1/128 scram-sha-256
若缺少对应规则手动添加后,重启PostgreSQL服务生效。
5 确认代码配置参数正确
在连接代码前打印config.DB_HOST、config.DB_PORT两个变量的取值,确认和PostgreSQL实际监听的地址、端口完全一致,排除配置文件参数写错的问题。
内容的提问来源于stack exchange,提问作者user8214
相关产品推荐
相关产品推荐

