连接失败
连接失败通常与连接地址、账号密码、网络访问路径、SSL 配置或连接数有关。应先确认使用的是 SDK、HTTP API、DMC 还是 PostgreSQL 协议直连。
常见现象
| 现象 | 可能原因 |
|---|---|
| password authentication failed | 用户名或密码错误,账号被回收 |
| connection timeout | 网络不通、地址错误、安全策略限制 |
| too many connections | 连接池过大、连接未释放、实例扩容过多 |
| database does not exist | 数据库名错误或实例连接信息不匹配 |
| SSL error | SSL 配置与实例要求不一致 |
基础检查
- 确认连接地址、端口、数据库名、用户名和密码来自同一个实例。
- 确认账号未被删除或改密。
- 确认运行环境可以访问数据库网络。
- 确认连接池没有超过数据库最大连接数。
- 确认应用使用了正确的环境变量。
使用 psql 验证
在可访问数据库的机器上使用 psql 验证连接。
psql "host=$PGHOST port=$PGPORT dbname=$PGDATABASE user=$PGUSER sslmode=require"
如果 psql 无法连接,优先排查网络、账号和实例状态。如果 psql 可以连接而应用失败,重点检查应用配置和连接池代码。
连接数耗尽
查看当前连接状态:
select state, count(*)
from pg_stat_activity
group by state
order by count(*) desc;
如果 idle 连接过多,应调小连接池 max 和 idle 超时,并确认代码释放了手动获取的连接。
云函数和云托管
在弹性环境中,不要每次请求都创建连接池。连接池应定义在模块顶层,让运行时实例复用。
如果仍然频繁耗尽连接,应评估最大实例数、单实例连接池大小、慢查询和锁等待。
更多建议请参考 连接管理。