
# 购买并通过PostgreSQL客户端连接RDS for PostgreSQL实例
RDS for PostgreSQL实例购买完成后，可以先登录到Linux弹性云服务器，在ECS上安装PostgreSQL客户端，然后执行psql命令行通过PostgreSQL内网IP连接到实例。
通过PostgreSQL客户端连接实例支持SSL连接方式，SSL连接具有加密功能，安全性更高。
创建RDS for PostgreSQL实例时默认开启SSL，实例创建完成后，不支持关闭。
开启SSL连接数据库实例后，数据库的只读、读写性能是未开启SSL连接数据库实例的80%左右。
#### 操作流程
| 操作步骤                                                                                                                      | 说明                                                                                                                                                |
|:---|:---|
| [准备工作]                                                                                 | 注册华为账号并开通华为云、实名认证、账户充值，以及对RDS进行精细权限管理。                                                                                                            |
| [步骤1：购买RDS for PostgreSQL实例] | 选择RDS for PostgreSQL的基础配置、高级配置信息，购买数据库实例。                                                                                                         |
| [步骤2：购买ECS]                                                                           | 通过PostgreSQL客户端连接数据库实例时，必须先准备一台服务器，在服务器上安装PostgreSQL客户端并执行连接命令。 购买Linux ECS，并确认ECS实例与RDS for PostgreSQL实例在同一区域、同一VPC内。 |
| [步骤3：测试连通性并安装PostgreSQL客户端]                                                              | 测试ECS到RDS for PostgreSQL实例内网IP和端口的网络连通性，并在ECS上安装PostgreSQL客户端。                                                                                    |
| [步骤4：使用命令行连接实例（SSL加密）]                                                                | 使用命令行通过内网IP和端口连接RDS for PostgreSQL实例。                                                                                                             |
   
 #### 准备工作
1. [注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)。
2. 完成实名认证。
   - 个人账号：[实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0077914254.html)
   
   - 企业账号：[实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0077914253.html)
    
3. 购买实例前需要确保账户有足够金额，请参见[账户充值](https://support.huaweicloud.com/usermanual-billing/bills-topic_30000002.html)。
4. 如果需要对华为云上的资源进行精细管理，请使用统一身份认证服务（Identity and Access Management，简称IAM）创建IAM用户及用户组，并授权，以使得IAM用户获得具体的操作权限，更多操作，请参见[创建用户组、用户并授予RDS权限](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_07_0002.html)。
 
 #### 步骤1：购买RDS for PostgreSQL实例
1. 进入[购买云数据库RDS页面](https://console.huaweicloud.com/rds/?#/rds/createIns)。
2. 在"快速购买"页面，配置实例基础参数。
   ![](https://support.huaweicloud.com/qs-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
   快速购买实例仅提供必要参数，更多参数配置请参见[自定义购买RDS for PostgreSQL实例](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_10_0028.html)。
   下面的配置项仅作为示例，实际购买时根据用户需求选择合适的资源。
   图1基础配置   
   ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248941457.png)
   
   | **参数** | **示例**          | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|:---|
   | 计费模式   | **按需计费**        | 实例的计费模式。 - 包年/包月：一种预付费模式，即先付费再使用，按照订单的购买周期进行结算。购买周期越长，享受的折扣越大。一般适用于需求量长期稳定的成熟业务。  - 按需计费：一种后付费模式，即先使用再付费，按照云数据库RDS实际使用时长计费，秒级计费，按小时结算。按需计费模式允许您根据实际业务需求灵活地调整资源使用，无需提前预置资源，从而降低预置过多或不足的风险。   |
   | 区域     | **华北-北京四**      | 资源所在的区域。 说明： 不同区域内的产品内网不互通，且创建后不能更换，请谨慎选择。                                                                                                                                                                                                                                        |
   | 引擎版本   | **16**          | 数据库版本。                                                                                                                                                                                                                                                                                                                                                                                    |
   | 实例类型   | **主备**          | 实例的架构类型。 主备：采用一主一备的经典高可用架构，主备实例的每个节点的规格保持一致。备机提高了实例的可靠性，创建主机的过程中，会同步创建备机，备机创建成功后，用户不可见。                                                                                                                                                                                                                                                                     |
   | 性能规格   | **通用型 4U8GB**   | 实例的CPU和内存规格。                                                                                                                                                                                                                                                                                                                                                                              |
   | 磁盘存储   | **SSD云盘 100GB** | 实例的存储空间。 您申请的存储空间会有必要的文件系统开销，这些开销包括索引节点和保留块，以及数据库运行必需的空间。                                                                                                                                                                                                                                                                                                  |
   | 磁盘加密   | **不加密**         | 选择加密后会提高数据安全性，但对数据库读写性能有少量影响，请按照您的使用策略进行选择。 如果使用共享KMS密钥，对应的CTS事件为createdatakey和decrydatakey，仅密钥所有者能够感知到该事件。                                                                                                                                                                                                                                                 |
      
   
3. 实例高级配置。
   图2高级配置   
   ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213661760.png)
   
   | **参数** | **示例**             | **参数说明**                                                                                                                                                                                                                                                                 |
   |:---|:---|:---|
   | 虚拟私有云  | **default_vpc**    | 实例所在的虚拟网络环境，可以对不同业务进行网络隔离。 如果没有可选的虚拟私有云，单击"创建虚拟私有云"，完成创建后单击![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248941497.png)。具体操作请参见[创建虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。 |
   | 子网     | **default_subnet** | 通过子网提供与其他网络隔离的、可以独享的网络资源，以提高网络安全性。                                                                                                                                                                                                                                       |
   | 安全组    | **default**        | 安全组限制实例的安全访问规则，加强RDS for PostgreSQL与其他服务间的安全访问。                                                                                                                                                                                                                          |
   | 企业项目   | **default**        | 对于已成功关联企业项目的用户，仅需在"企业项目"下拉框中选择目标项目。 更多关于企业项目的信息，请参见[《企业管理用户指南》](https://support.huaweicloud.com/usermanual-em/zh-cn_topic_0108763975.html)。                                                                                                  |
   | 购买数量   | **1**              | 批量创建实例的个数。                                                                                                                                                                                                                                                               |
      
   
4. 配置完成后，单击"立即购买"。
5. 查看购买成功的RDS for PostgreSQL实例。
   图3购买成功   
   ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248781601.png) 
 
 #### 步骤2：购买ECS
1. 进入[弹性云服务器控制台](https://console.huaweicloud.com/ecm/?locale=zh-cn#/ecs/manager/vmList)。
2. 查看是否有符合要求的Linux ECS。
   ![](https://support.huaweicloud.com/qs-rds-pg/public_sys-resources/notice_3.0-zh-cn.png)
   RDS for PostgreSQL支持以下两种常用的客户端安装方式：
   - 下载PostgreSQL客户端安装包进行安装：PostgreSQL 15及以下版本推荐使用该方式，**同时对ECS的镜像也有要求，详见[PostgreSQL社区指导](https://www.postgresql.org/download/linux/redhat/)。**
   
   - 下载源码进行安装：该方式对PostgreSQL版本及ECS的镜像没有要求。
    
   - 有Linux ECS，执行[3]。
   
   - 没有Linux ECS，需要购买ECS，购买时选择Linux操作系统，例如CentOS 7。 由于需要在ECS下载PostgreSQL客户端，因此需要为ECS绑定弹性公网IP（EIP），并且选择与RDS for PostgreSQL实例相同的区域、VPC和安全组，便于RDS for PostgreSQL和ECS网络互通。
     购买Linux弹性云服务器请参考《弹性云服务器用户指南》中"[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)"章节。
     
    
3. 分别查看ECS的区域和VPC，以及RDS for PostgreSQL实例的区域和VPC。确认ECS实例与RDS for PostgreSQL实例处于同一区域、同一VPC内。
   图4ECS基本信息   
   ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213661720.png)
   
   图5PostgreSQL概览   
   ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213661732.png)
   - 如果不在同一区域，请重新购买ECS实例。不同区域的云服务之间内网互不相通，无法访问实例。请就近选择靠近您业务的区域，可减少网络时延，提高访问速度。
   
   - 如果不在同一VPC，可以修改ECS的VPC，请参见[切换虚拟私有云](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0504.html)。
    
 
 #### 步骤3：测试连通性并安装PostgreSQL客户端
- [安装PostgreSQL客户端（15及以下版本）]
  1. 登录ECS实例，请参见《弹性云服务器用户指南》中"[Linux弹性云服务器远程登录（VNC方式）](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0136.html)"。
  
  2. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
  
  3. 选择"连接管理"，在"连接信息"模块获取实例的内网地址和数据库端口。
     图6连接信息   
     ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213821560.png) 
  
  4. 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例内网地址的端口。
     ```
     curl -kv 192.168.0.7:5432
     ```
     - 如果回显信息中有"Connected to *ip* (*ip* ) port *port_number* "，说明网络正常，可以通信。
     
     - 否则，说明无法通信，请检查安全组规则。
       - 查看ECS的安全组的出方向规则，如果目的地址不为"0.0.0.0/0"且协议端口不为"全部"，需要将RDS实例的内网IP地址和端口添加到出方向规则。
         图7ECS的安全组   
         ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248781553.png) 
       
       - 查看RDS的安全组的入方向规则，需要将ECS实例的私有IP地址和端口添加到入方向规则，具体操作请参见[设置安全组规则](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_11_0009.html)。
        
      
  
  5. 安装PostgreSQL客户端。 PostgreSQL社区提供了针对不同操作系统的[客户端安装方法](https://www.postgresql.org/download/)。通过操作系统的安装工具直接下载安装。此安装方式比较简单，但是对ECS操作系统有要求，只有PostgreSQL社区中支持的操作系统才可以使用该安装方式。
     使用操作系统默认安装，当前使用的Linux操作系统是CentOS 7，通过工具安装最高版本是15版本。
     图8获取安装工具   
     ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213661744.png)
     执行[安装](https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm)命令：
     ```
     sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
     sudo yum install -y postgresql15-server
     ```
     查看是否安装成功：
     ```
     psql -V
     ```
     图9安装成功   
     ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248941493.png) 
   
- [安装PostgreSQL客户端（对版本没有限制）]
  1. 登录ECS实例，请参见《弹性云服务器用户指南》中"[Linux弹性云服务器远程登录（VNC方式）](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0136.html)"。
  
  2. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
  
  3. 选择"连接管理"，在"连接信息"模块获取实例的内网地址和数据库端口。
     图10连接信息   
     ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213661748.png) 
  
  4. 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例内网地址的端口。
     ```
     curl -kv 192.168.0.7:5432
     ```
     - 如果回显信息中有"Connected to *ip* (*ip* ) port *port_number* "，说明网络正常，可以通信。
     
     - 否则，说明无法通信，请检查安全组规则。
       - 查看ECS的安全组的出方向规则，如果目的地址不为"0.0.0.0/0"且协议端口不为"全部"，需要将RDS实例的内网IP地址和端口添加到出方向规则。
         图11ECS的安全组   
         ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248941485.png) 
       
       - 查看RDS的安全组的入方向规则，需要将ECS实例的私有IP地址和端口添加到入方向规则，具体操作请参见[设置安全组规则](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_11_0009.html)。
        
      
  
  5. 安装PostgreSQL客户端。 [源码安装方式](https://www.postgresql.org/docs/16/installation.html)，该安装方式对RDS for PostgreSQL实例的版本以及ECS的操作系统没有限制。
     下面以Huawei Cloud EulerOS 2.0镜像的ECS为例，安装PostgreSQL 16.4版本客户端。
     图12查看ECS镜像   
     ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213821548.png)
     1. 要支持SSL，需要在ECS上提前下载openssl。
        ```
        sudo yum install -y openssl-devel
        ```
        
     
     2. 在[官网](https://www.postgresql.org/ftp/source/)获取代码下载链接，使用wget直接下载安装包或者[下载到本地](https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz)后上传到ECS上。
        ```
        wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
        ```
        
     
     3. 解压安装包。
        ```
        tar xf postgresql-16.4.tar.gz
        ```
        
     
     4. 编译安装。
        ```
        cd postgresql-16.4
        ./configure --without-icu --without-readline --without-zlib --with-openssl
        make -j 8 && make install
        ```
        ![](https://support.huaweicloud.com/qs-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
        不指定--prefix，表示默认路径为"/usr/local/pgsql"，因为只安装客户端采用最简安装。
        图13编译安装   
        ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248781597.png) 
     
     5. 配置环境变量，在"/etc/profile"文件中添加以下内容。
        ```
        export PATH=/usr/local/pgsql/bin:$PATH
        export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
        source /etc/profile
        ```
        
     
     6. 测试psql是否可使用。
        ```
        psql -V
        ```
        图14测试psql可用   
        ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248941469.png) 
      
   
 #### 步骤4：使用命令行连接实例（SSL加密）
1. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
2. 选择"连接管理"。
3. 在"连接信息"模块，单击"SSL"处的![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002213821556.png)，下载"Certificate Download"压缩包，解压后获取根证书（ca.pem）和捆绑包（ca-bundle.pem）。
   图15下载证书   
   ![](https://support.huaweicloud.com/qs-rds-pg/zh-cn_image_0000002248941481.png) 
4. 将根证书（ca.pem）上传到ECS。
   ![](https://support.huaweicloud.com/qs-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
   - 推荐使用TLS v1.2及以上协议，低于该版本可能存在安全风险。
   
   - 协议算法推荐使用EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EDH+aDSS+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!SRP:!RC4，使用其他选项可能存在安全风险。
   
   - 根证书捆绑包（ca-bundle.pem）包含2017年4月之后的新根证书和原有根证书。
   
   - ca.pem和ca-bundle.pem都可以实现SSL连接，ca-bundle.pem文件包含ca.pem，使用ca.pem即可。
     
5. 在ECS上执行以下命令连接RDS for PostgreSQL实例。
   ```
   psql --no-readline -h <host> -p <port> "dbname=<database> user=<user> sslmode=verify-ca sslrootcert=<ca-file-directory>"
   ```
   示例：
   ```
   psql --no-readline -h 192.168.0.7 -p 5432 "dbname=postgres user=root sslmode=verify-ca sslrootcert=/root/ca.pem"
   ```
   表1参数说明 
   | 参数                      | **示例**           | 说明                                                                  |
   |:---|:---|:---|
   | *\<host\>*              | **192.168.0.7**  | 在[3]中获取的内网地址。                       |
   | *\<port\>*              | **5432**         | 在[3]中获取的数据库端口，默认5432。               |
   | *\<database\>*          | **postgres**     | 需要连接的数据库名，默认的管理数据库是postgres。                                        |
   | *\<user\>*              | **root**         | 管理员账号root。                                                          |
   | *\<ca-file-directory\>* | **/root/ca.pem** | SSL连接CA证书路径，该文件需放在执行该命令的路径下。                                        |
   | sslmode                 | **verify-ca**    | SSL连接模式，设置为"verify-ca"，通过检查证书链（Certificate Chain，以下简称CA）来验证服务是否可信任。 |
      
   
6. 出现如下提示时，输入数据库账号对应的密码。
   ```
   Password:
   ```
   出现如下信息，表示连接成功。
   ```
   SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
   ```
   
 
#### 常见问题
#### 如果密码忘记了怎么办？
在"实例管理"页面，选择指定的实例，选择"更多 \> 重置密码"，输入新密码。
#### 后续操作
登录实例后，您可以创建数据库，进行数据迁移等操作，具体请参见：
- [通过界面可视化创建PostgreSQL数据库](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_05_0019.html)
- [通过调用API创建PostgreSQL数据库](https://support.huaweicloud.com/api-rds/rds_11_0002.html)
- [通过DAS管理PostgreSQL数据库](https://support.huaweicloud.com/usermanual-das/das_11_0028.html)
- [将数据迁移到云上RDS for PostgreSQL](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_05_0001_03.html)
 
