
# 通过gsql客户端无法连接数据库
#### 问题现象
用户通过客户端工具gsql无法连接到数据库。
#### 原因分析
- 系统连接数量超过了最大连接数量，会显示如下错误信息。
  ```
  gsql -d human_resource -h 10.168.0.74 -U user1 -p 8000 -W password -r
  gsql: FATAL:  sorry, too many clients already
  ```
  
- 用户不具备访问该数据库的权限，会显示如下错误信息。
  ```
  gsql -d human_resource -h 10.168.0.74 -U user1 -p 8000 -W password -r
  gsql: FATAL:  permission denied for database "human_resource"
  DETAIL:  User does not have CONNECT privilege.
  ```
  
- 网络连接故障。
 
#### 解决办法
- 系统连接超过最大连接数量。 用户可在DWS 控制台设置最大连接数max_connections。
  max_connections设置方法如下：
  1. 登录[DWS控制台](https://console.huaweicloud.com/dws)。
  
  2. 在左侧导航栏中，单击"集群 \> 集群列表"。
  
  3. 在集群列表中找到所需要的集群，单击集群名称，进入"集群详情"页面。
  
  4. 单击"参数修改"页签，在"参数列表"中找到"max_connections"修改其参数值，然后单击"保存"。
  
  5. 在"修改预览"窗口，确认修改无误后，单击"保存"。
  
  
  关于查看用户会话连接数的方法如[表1]。
   表1查看会话连接数 
  | 描述                | 命令                                                                                                                                                                                                                                                                                                                       |
  |:---|:---|
  | 查看指定用户的会话连接数上限。   | 执行如下命令查看连接到指定用户user1的会话连接数上限。其中，-1表示没有对用户user1设置连接数的限制。 ``` SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='user1'; rolname | rolconnlimit ---------+-------------- user1   |       -1 (1 row) ```               |
  | 查看指定用户已使用的会话连接数。  | 执行如下命令查看指定用户user1已使用的会话连接数。其中，1表示user1已使用的会话连接数。 ``` SELECT COUNT(*) FROM V$SESSION WHERE USERNAME='user1'; count ------- 1 (1 row) ```                                                                                   |
  | 查看指定数据库的会话连接数上限。  | 执行如下命令查看连接到指定数据库db_demo的会话连接数上限。其中，-1表示没有对数据库db_demo设置连接数的限制。 ``` SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='db_demo'; datname  | datconnlimit ----------+-------------- db_demo  |       -1 (1 row) ``` |
  | 查看指定数据库已使用的会话连接数。 | 执行如下命令查看指定数据库db_demo上已使用的会话连接数。其中，1表示数据库db_demo上已使用的会话连接数。 ``` SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='db_demo'; count ------- 1 (1 row) ```                                                                 |
  | 查看所有用户已使用会话连接数。   | 执行如下命令查看所有用户已使用的会话连接数。 ``` SELECT COUNT(*) FROM PG_STAT_ACTIVITY; count ------- 10 (1 row) ```                                                                                                                            |
     
  
- 用户不具备访问该数据库的权限。
  1. 使用管理员用户dbadmin连接数据库。
     ```
     gsql -d human_resource -h 10.168.0.74 -U dbadmin -p 8000 -W password -r
     ```
     
  
  2. 赋予user1用户访问数据库的权限。
     ```
     GRANT CONNECT ON DATABASE human_resource TO user1;
     ```
     ![](https://support.huaweicloud.com/trouble-dws/public_sys-resources/note_3.0-zh-cn.png)
     实际上，常见的许多错误操作也可能产生用户无法连接上数据库的现象。例如，用户连接的数据库不存在，用户名或密码输入错误等。这些错误操作在客户端工具会有相应的提示信息。
     ```
     gsql -d human_resource -p 8000
     gsql: FATAL:  database "human_resource" does not exist
     gsql -d human_resource -U user1 -W password -p 8000
     gsql: FATAL:  Invalid username/password,login denied.
     ```
     
   
- 网络连接故障。 请检查客户端与数据库服务器间的网络连接。如果发现从客户端无法PING到数据库服务器端，则说明网络连接出现故障。请联系技术支持工程师提供技术支持。
  ```
  ping -c 4 10.10.10.1
  PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
  From 10.10.10.1: icmp_seq=2 Destination Host Unreachable
  From 10.10.10.1 icmp_seq=2 Destination Host Unreachable
  From 10.10.10.1 icmp_seq=3 Destination Host Unreachable
  From 10.10.10.1 icmp_seq=4 Destination Host Unreachable
  --- 10.10.10.1 ping statistics ---
  4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999ms
  ```
  
 
