启动Telegram Bot(aiogram)连接PostgreSQL时遇连接拒绝错误
解决psycopg2.OperationalError:本地PostgreSQL连接被拒绝问题
遇到的错误信息:
connection to server at "127.0.0.1", port 5432 failed: Connection refused (0x0000274D/10061) Is the server running on that host and accepting TCP/IP connections?
你猜测Bot和数据库用同一本地IP导致问题,这个说法不成立——本地服务之间本来就通过127.0.0.1/localhost通信,问题出在以下几个常见环节,按顺序排查:
检查PostgreSQL服务是否启动
- Windows:打开「服务」(运行
services.msc),找到PostgreSQL相关服务,确认状态为「正在运行」,未启动则右键启动。 - Linux/macOS:执行
sudo systemctl status postgresql查看状态,未运行则用sudo systemctl start postgresql启动。
- Windows:打开「服务」(运行
确认PostgreSQL监听TCP/IP连接
- 找到PostgreSQL的
postgresql.conf配置文件(路径根据系统版本不同:Windows一般在C:\Program Files\PostgreSQL\<版本>\data,Linux在/var/lib/postgresql/<版本>/main,macOS在/Library/PostgreSQL/<版本>/data)。 - 查找
listen_addresses参数,确保值为'*'或包含'127.0.0.1'(默认'localhost'也支持本地连接)。修改后重启PostgreSQL服务。
- 找到PostgreSQL的
配置pg_hba.conf允许本地TCP连接
- 同样在data目录下找到
pg_hba.conf,添加或确认存在以下规则:
认证方式可根据你的PostgreSQL版本调整(比如旧版本用host all all 127.0.0.1/32 scram-sha-256md5),修改后重启服务。
- 同样在data目录下找到
核对Bot连接参数
- 检查aiogram代码中的数据库连接配置,确保host是
'127.0.0.1'或'localhost',端口为5432,用户名、密码、目标数据库名均无拼写错误。
- 检查aiogram代码中的数据库连接配置,确保host是
排查防火墙/安全软件拦截
- Windows:检查Windows防火墙是否允许PostgreSQL通过5432端口通信,可临时关闭防火墙测试。
- Linux:执行
sudo ufw allow 5432开放端口,或检查iptables规则。 - 第三方杀毒、安全软件也可能拦截,暂时关闭验证是否解决问题。
内容的提问来源于stack exchange,提问作者Dired
相关产品推荐
相关产品推荐

