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

Rust中Diesel连接Postgres报错:客户端连接数过多求助

问题排查与解决方案

核心可能原因及修复

1. Diesel版本与rocket_sync_db_pools不兼容

rocket_sync_db_pools 0.1.x(适配Rocket 0.5)目前依赖Diesel 1.x,如果你的Cargo.toml中使用了Diesel 2.x,会导致连接池无法正确管理连接,出现无限制创建连接直到耗尽Postgres连接数的情况。

修复方案:
将Diesel版本降级到1.x,同时确保启用对应特性:

# Cargo.toml 中相关依赖调整
diesel = { version = "1.4.8", features = ["postgres", "uuid", "serde_json"] }
rocket_sync_db_pools = { version = "0.1.0", features = ["diesel_postgres_pool"] }

2. 检查Postgres连接数实际使用情况

即使你认为没有其他应用占用连接,也需要确认Postgres当前的连接数:

  • 打开psql终端,执行:
    SELECT count(*) FROM pg_stat_activity;
    
  • 如果启动程序前连接数已经接近100,说明有隐藏的连接占用(比如之前程序崩溃未释放的连接,或Postgres自身的连接),可以重启Postgres释放所有连接。

3. 避免重复添加数据库Fairing

检查你的代码中是否多次调用Db::fairing(),比如在多个Stage中重复attach。每个数据库连接池只需要attach一次,重复attach会创建多个独立的连接池,快速耗尽连接数。

从你的代码看,resources::file_resource::stage()中已经attach了Db::fairing(),确保主启动函数中没有再次attach该Fairing。

4. 验证Postgres配置是否生效

  • 确认你修改的postgresql.conf是Postgres实际加载的配置文件(不同安装方式路径不同,比如Docker容器内路径为/var/lib/postgresql/data/postgresql.conf)。
  • 修改max_connections后必须重启Postgres才能生效。
  • 执行以下命令验证当前生效的配置:
    SHOW max_connections;
    

额外建议

  • 启动程序时,用watch命令实时监控Postgres连接数,观察连接数变化:
    watch -n 1 "psql -U postgres -d diesel -c 'SELECT count(*) FROM pg_stat_activity;'"
    
    如果启动程序后连接数瞬间飙升到100,说明代码存在连接泄漏或连接池管理异常,优先检查Diesel版本兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:23:16