跳到主要内容

连接失败

连接失败通常与连接地址、账号密码、网络访问路径、SSL 配置或连接数有关。应先确认使用的是 SDK、HTTP API、DMC 还是 PostgreSQL 协议直连。

常见现象

现象可能原因
password authentication failed用户名或密码错误,账号被回收
connection timeout网络不通、地址错误、安全策略限制
too many connections连接池过大、连接未释放、实例扩容过多
database does not exist数据库名错误或实例连接信息不匹配
SSL errorSSL 配置与实例要求不一致

基础检查

  1. 确认连接地址、端口、数据库名、用户名和密码来自同一个实例。
  2. 确认账号未被删除或改密。
  3. 确认运行环境可以访问数据库网络。
  4. 确认连接池没有超过数据库最大连接数。
  5. 确认应用使用了正确的环境变量。

使用 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 超时,并确认代码释放了手动获取的连接。

云函数和云托管

在弹性环境中,不要每次请求都创建连接池。连接池应定义在模块顶层,让运行时实例复用。

如果仍然频繁耗尽连接,应评估最大实例数、单实例连接池大小、慢查询和锁等待。

更多建议请参考 连接管理