You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLAlchemy异步连接本地PostgreSQL时触发socket.gaierror错误求助

解决SQLAlchemy异步连接PostgreSQL时的socket.gaierror问题

问题背景

使用SQLAlchemy异步方式连接本地PostgreSQL数据库,代码可进入async with database.async_session.begin()代码块,但执行数据库操作(如AccountOrm.one_or_none查询)时崩溃,栈追踪最终指向错误:

socket.gaierror: [Errno -2] Name or service not known

核心原因

该错误本质是TCP连接时的域名解析失败,和HTTP无关——PostgreSQL通过TCP(或Unix套接字)建立连接,当连接URL中的主机地址无法被系统解析时,就会触发此错误。

排查与解决方法

1. 修正数据库连接URL的主机地址

本地连接时,避免使用无法解析的自定义主机名,直接使用以下可靠值:

  • localhost:依赖系统hosts解析到127.0.0.1
  • 127.0.0.1:直接指定回环IP,无需域名解析
  • Unix套接字路径(仅Linux/macOS):比如/var/run/postgresql/.s.PGSQL.5432,URL格式为postgresql+asyncpg://user:password@/dbname?host=/var/run/postgresql

正确的异步连接URL示例:

DATABASE_URL = "postgresql+asyncpg://your_username:your_password@localhost:5432/your_db_name"

2. 检查PostgreSQL监听配置

打开PostgreSQL配置文件postgresql.conf,确认listen_addresses参数:

  • 本地测试建议设置为listen_addresses = 'localhost',允许本地回环连接
  • 若需远程连接,可设置为listen_addresses = '*'(注意安全风险)

修改后需重启PostgreSQL服务生效。

3. 验证基础连接可用性

先用psql命令测试本地连接,排除PostgreSQL本身的配置问题:

psql -h localhost -U your_username your_db_name

如果该命令无法连接,优先解决PostgreSQL本地连接问题,再排查SQLAlchemy代码。

4. 确认端口与其他参数匹配

确保连接URL中的端口号和PostgreSQL配置的port参数一致(默认5432),同时验证用户名、密码、数据库名称是否正确。

内容的提问来源于stack exchange,提问作者ConfusedPerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:25:57