asyncpg连接PostgreSQL 13抛出ConnectionRefusedError错误如何解决
问题根因
你当前遇到的ConnectionRefusedError是asyncpg无法和PostgreSQL服务建立网络连接导致的,核心有两个直接原因:1. 连接参数缺失主机和端口配置;2. PostgreSQL服务侧未允许连接。
解决步骤
- 第一步:确认PostgreSQL服务正常运行
按下Win+R输入services.msc打开服务列表,找到postgresql-x64-13服务,确认状态为正在运行,如果未启动则右键选择启动。 - 第二步:修复asyncpg连接参数
你当前的连接配置仅指定了库名、用户名、密码,未指定数据库服务的主机地址和端口,Windows环境下asyncpg默认不会走本地127.0.0.1连接,需要手动补全参数。修改NCA.py中create_db_pool方法的代码:async def create_db_pool(self): self.db = await asyncpg.create_pool( host="127.0.0.1", # 本地开发填127.0.0.1,远程部署填PG服务的公网/内网IP port=5432, # PostgreSQL默认端口为5432,如果你修改过端口请替换为实际端口 database="nca", password="hehe", user="postgres" ) - 第三步:检查PostgreSQL访问配置
- 找到PostgreSQL安装目录下的
data/postgresql.conf文件,修改listen_addresses配置,本地开发可改为listen_addresses = '*',保存后重启PostgreSQL服务。 - 找到同目录下的
pg_hba.conf文件,在末尾添加一行规则允许本地访问:
保存后再次重启PostgreSQL服务。host all all 127.0.0.1/32 scram-sha-256
- 找到PostgreSQL安装目录下的
- 第四步:提前验证数据库连通性
打开pgAdmin或psql命令行工具,使用你配置的用户名、密码、库名尝试连接,确认可以正常访问后再启动机器人代码。
额外注意事项
- 你需要提前在PostgreSQL中手动创建名为
nca的数据库,否则连接参数正确也会报错库不存在。 - 你当前在机器人
__init__方法中用run_until_complete初始化连接池的写法不符合discord.py的异步规范,后续稳定运行建议将数据库初始化逻辑移到on_ready事件中执行。
内容的提问来源于stack exchange,提问作者NeXus_ Coder_X
相关产品推荐
相关产品推荐

