跳到主要内容

连接失败

连接失败通常与连接地址、账号密码、网络访问路径、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 超时,并确认代码释放了手动获取的连接。

云函数和云托管​

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

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

更多建议请参考 连接管理。