
# RDS for PostgreSQL数据库已有连接执行业务时报错
#### 故障描述
客户端通过已有连接执行业务时，返回如下报错信息：
- 故障一
  ```
  org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
  ```
  

- 故障二
  ```
  org.postgresql.util.PSQLException: The connection attempt failed 
  ... 
  Caused by: java.net.SocketException: Connection reset
  ```
  
 
#### 故障一的解决方案
原因分析：
- SQL语句参数过多
- 连接被释放
解决方案：
- 对于SQL语句参数过多的情况，需要自行排查业务，对包含较多参数SQL进行适当拆分。
- 对于连接被释放导致报错的情况，排查客户端连接相关参数，如连接超时时间。业务上建议增加自动重试机制。
 
#### 故障二的解决方案
这类问题是由于已有连接被释放掉，使用已经释放的连接会出现这个报错。可能原因主要有以下几种：
- 网络链路问题
- 数据库重启或后端进程crash
- 空闲连接超时释放
解决方案：
1. 首先排查网络连通性，判断是否有网络链路因素（丢包率、重传比例高）导致连接断开。
2. 如果没有网络层面的问题，需要排查业务是否有其他报错导致连接断开。
3. 如果业务上也没有其他报错，则尝试排查连接超时参数（如jdbc连接池参数sockettimeout和connecttimeout），如果设置值较小，会导致连接被主动释放。
 
