
# 建立数据库连接失败
#### Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
**问题分析**：客户端与服务端网络不通、端口错误或待连接CN异常。
**处理方法** ：
- 客户端ping服务端IP，查看网络是否畅通，网络不通则需解决网络问题。
- 检查URL中连接CN的端口是否正确，若端口不正确则需修改为正确的端口（默认为8000）。
 
#### FATAL: Invalid username/password,login denied.
**问题分析**：用户名或密码配置错误。
**处理方法**：检查用户名密码是否为数据库用户名和密码，将其修改为正确的数据库用户名和密码。
#### No suitable driver found for XXXX
**问题分析**：通过JDBC建连时URL格式错误。
**处理方法** ：将URL格式修改为正确的格式。
- gsjdbc4.jar对应URL格式为： jdbc:postgresql://host:port/database
  - 在使用pom依赖时对应8.1.x版本
   
- gsjdbc200.jar对应URL格式为：jdbc:gaussdb://host:port/database
  - 在使用pom依赖时对应8.1.x-200版本
   
 
#### conflict
**问题分析**：JDBC jar包和应用程序冲突。例如JDBC和应用程序拥有相同路径相同名称的类导致：
- gsjdbc4.jar和开源postgresql.jar冲突，两者具有完全相同的类名。
- gsjdbc4.jar由于IAM特性引入了一些其他工具，例如fastjson，和应用程序中的fastjson冲突。
**处理方法**：
- 针对和开源postgresql.jar的冲突，DWS提供了gsjdbc200.jar，使用和开源驱动不同的url格式和驱动路径，驱动名由**org.postgresql.Driver** 修改为**com.huawei.gauss200.jdbc.Driver** ，URL格式由**org:postgresql://host:port/database** 改为**jdbc:gaussdb://host:port/database**，彻底解决了和开源jar包的冲突。
- 针对JDBC引入的jar和应用程序中引入jar的冲突，可以通过maven的**shade**修改jar中类的路径，解决此类冲突。
- 排查使用的JDBC驱动是gsjdbc4.jar还是gsjdbc200.jar，如果是gsjdbc4.jar应该替换为gsjdbc200.jar，尝试建立连接。
  ![](https://support.huaweicloud.com/trouble-dws/public_sys-resources/note_3.0-zh-cn.png)
  对于pom依赖，将8.1.x版本替换为8.1.x-200版本。
  
 
#### org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command Session unused timeout
**问题分析**：会话超时导致连接断开。
**处理方法**：排查CN和客户端JDBC上的超时配置，按业务实际情况调长超时时间或关闭超时设置。
1. 查看报错的CN日志，如果有session unused timeout这样的日志，说明是会话超时导致的。
   解决办法：
   1. 登录[DWS控制台](https://console.huaweicloud.com/dws)。
   
   2. 在左侧导航栏中，单击"集群 \> 集群列表"。
   
   3. 在集群列表中找到所需要的集群，单击集群名称，进入"集群详情"页面。
   
   4. 单击"参数修改"页签，在"参数列表"中找到"session_timeout"参数查看超时时间。
   
   5. 将session_timeout参数的CN、DN参数值设置为0，关闭超时设置。 ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001330929618.png "点击放大")
      
    
 
#### Connection refused: connect.
**问题分析**：第三方工具的默认驱动不兼容。
**处理方法**：用户可更换JDBC驱动包，查看是否正常连接。
#### Connections could not be acquired from the underlying database!
**问题分析**：按照新建连接排查项进行排查：
- 驱动配置是否有误。
- 数据库连接地址是否有误。
- 密码或账号是否有误。
- 数据库未启动或无权访问。
- 项目未引入对应的驱动jar包。
**处理方法**：
- 排查驱动配置，将其修改为正确的驱动配置。
  - gsjdbc4.jar driver=org.postgresql.Driver
  
  - gsjdbc200.jar driver=com.huawei.gauss200.jdbc.Driver
   
- 排查数据库连接地址，将其修改为正确的数据库连接地址。
  - gsjdbc4.jar对应jdbc:postgresql://host:port/database
  
  - gsjdbc200.jar对应jdbc:gaussdb://host:port/database
   
- 排查用户名密码是否为数据库用户名或密码，将其修改为正确的数据库用户名或密码。
- 排查数据库是否启动或有权限访问。
- 检查使用的JDBC驱动是gsjdbc4.jar还是gsjdbc200.jar，请使用正确JDBC驱动jar包。
  - gsjdbc4.jar：与PostgreSQL保持兼容，其中类名、类结构与PostgreSQL驱动完全一致，曾经运行于PostgreSQL的应用程序可以直接移植到当前系统中使用。
  
  - gsjdbc200.jar：如果同一JVM进程内需要同时访问PostgreSQL及DWS 请使用该驱动包。该包主类名为"com.huawei.gauss200.jdbc.Driver"（即将"org.postgresql"替换为"com.huawei.gauss200.jdbc"），数据库连接的URL前缀为"jdbc:gaussdb"，其余与gsjdbc4.jar相同。
   
 
#### JDBC DEV环境没问题，测试环境连接出错报空指针或URI报错uri is not hierarchical
**问题分析**：某些虚拟环境不支持获取扩展参数，需关闭。
**处理方法** ：在连接时可设置连接参数"connectionExtraInfo=false"，详情可参见[使用JDBC连接数据库](https://support.huaweicloud.com/mgtg-dws/dws_01_0077.html)。
```
jdbc:postgresql://host:port/database?connectionExtraInfo=false
```
#### 使用开源JDBC SSL方式连接DWS报错
**问题分析**：使用开源JDBC会进行SSL全校验，校验url是否完全匹配。
**处理方法**：在开源连接时可设置连接参数"sslmode=require"。
```
jdbc:postgresql://host:port/database?sslmode=require
```
#### 在CopyManager场景使用连接池获取连接，Connection无法转换为BaseConnection
**问题分析**：BaseConnection为非公开类，需要对连接池对象解封装然后获取原始PGConnection。
**处理方法**： 对当前对象解包装，返回原始对象以允许访问未公开方法。
```
//解封装
PGConnection unwrap = connection.unwrap(PGConnection.class);
//转换BaseConnection
BaseConnection baseConnection = (BaseConnection)unwrap;
CopyManager copyManager = new CopyManager(baseConnection);
```
