PostgreSQL连接报错求助:psycopg2.OperationalError连接被拒绝
解决psycopg2.OperationalError: Connection refused的问题
我之前也碰到过一模一样的情况,启动PostgreSQL服务后还是连不上,大概率是配置或者参数匹配的问题,给你几个逐步排查的方向:
1. 确认PostgreSQL真的在监听5432端口
有时候服务启动了,但可能没监听指定的端口。你可以用命令检查:
- Windows:打开命令提示符,运行
netstat -ano | findstr :5432,看看有没有显示LISTENING状态的进程,PID对应PostgreSQL的进程。 - Linux/macOS:在终端运行
lsof -i :5432或者netstat -tulpn | grep 5432,确认postgres进程在监听这个端口。
如果没看到监听记录,那得检查PostgreSQL的配置文件。
2. 检查postgresql.conf的监听地址设置
找到你的PostgreSQL 9.6.5的配置文件postgresql.conf:
- Linux通常在
/var/lib/postgresql/9.6/main/postgresql.conf - Windows一般在
C:\Program Files\PostgreSQL\9.6\data\postgresql.conf
打开文件,找到listen_addresses这一行,确保它的值是localhost或者*(允许所有地址访问):
listen_addresses = 'localhost' # 或者用'*'
修改后重启PostgreSQL服务,再检查端口监听情况。
3. 验证pg_hba.conf的访问权限配置
同样在data目录下找到pg_hba.conf文件,检查是否允许本地的postgres用户连接。需要确保有类似这样的行:
host all postgres 127.0.0.1/32 md5 host all postgres ::1/128 md5
这两行允许IPv4和IPv6的localhost地址用postgres用户登录,认证方式是md5(密码验证)。如果没有的话,添加进去,然后重启服务。
4. 确认代码里的连接参数完全正确
- 先试试用psql命令行连接,验证参数是否有效:
输入密码psql -d app_db -U postgres -h localhost -p 5432samet,如果能成功登录,说明参数没问题;如果连不上,就检查:app_db数据库是否真的存在?登录psql后用\l命令查看数据库列表。postgres用户是否存在?用\du查看用户列表。- 密码是否正确?可以用
ALTER USER postgres PASSWORD 'samet';重置密码试试。 - 端口是不是5432?有些安装会默认改成其他端口,检查postgresql.conf里的
port参数。
5. 检查本地防火墙设置
有时候本地防火墙会挡住5432端口,导致连接被拒绝:
- Windows:打开“Windows Defender防火墙”,添加允许PostgreSQL程序或者5432端口的入站规则。
- Linux:用
ufw allow 5432(如果用ufw防火墙)或者配置iptables允许端口访问。
如果以上步骤都试过,应该能解决连接问题。你可以先从命令行连接开始排查,确定是PostgreSQL配置的问题还是代码参数的问题,这样更容易定位。
内容的提问来源于stack exchange,提问作者samet yılmaz
相关产品推荐
相关产品推荐

