# 数据转发至PostgreSQL存储
#### 场景说明
平台支持将设备上报的数据转发至云数据库（PostgreSQL），由PostgreSQL进行存储，用户无需做额外的数据存储代码开发即可使用设备数据进行业务处理。
#### 前提条件
- 已购买[设备接入服务企业版实例](https://support.huaweicloud.com/usermanual-iothub/iot_01_0078.html)。
- 已购买[云数据库PostgreSQL实例](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_10_0028.html)。
 
#### 创建PostgreSQL数据库表
1. 登录华为云官方网站，访问[云数据库 PostgreSQL](https://www.huaweicloud.com/product/pg.html)，进入云数据库PostgreSQL实例。
   
   ![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
   设备接入服务企业版实例支持[通过内网连接PostgreSQL](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_connect_05.html)，支持[通过公网连接PostgreSQL](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_connect_06.html)。
   
   
2. 在PostgreSQL实例中，根据[数据流转](https://support.huaweicloud.com/api-iothub/iot_06_v5_01200.html)格式设计创建数据库表，具体操作指导可以参见[通过数据管理服务DAS连接RDS for PostgreSQL实例](https://support.huaweicloud.com/qs-rds-pg/rds_03_0300.html)。
   
   图1创建数据库表样例   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000002218549876.png)
   
   
3. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，可以通过[数据过滤语句](https://support.huaweicloud.com/usermanual-iothub/iot_01_0025.html)编辑流转数据。本示例使用[设备属性上报通知](https://support.huaweicloud.com/api-iothub/iot_06_v5_01202.html)，将流转数据中的resource、event、device_id、service_id、properties、event_time分别转存至数据库表中的resource、event、device_id、service_id、properties、event_time字段。
 
#### 创建数据转发规则
在设备接入服务中创建产品模型、注册设备并设置数据转发规则，实现当设备上报数据时将数据转发至PostgreSQL。
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 左侧导航栏单击"产品"，在页面中单击"创建产品"，选择新建产品所属的资源空间，创建一个基于MQTT协议的产品，填写参数后，单击"确定"。
   
   表1**基本信息** 
   |  所属资源空间  |     选择资源空间      |
   |---|---|
   | **产品名称** | 自定义，如MQTT_Device |
   | **协议类型**  | 选择"MQTT"       |
   | **数据格式** | 选择"JSON"       |
   | **所属行业**    | 根据实际情况进行选择。       |
      
   
   
3. 下载[文件](https://obs-pipeline.obs.cn-north-4.myhuaweicloud.com/sdkDeploy/Profile_01.zip)，获取产品模型文件样例。
4. 在基本信息页面，单击"上传模型文件"，在弹出的页面中加载产品模型文件，然后单击"确定"。 
   图2产品-上传产品模型   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001981312633.png "点击放大")
   
   
5. 选择左侧导航栏的"设备 \> 所有设备"，进入设备列表页面，单击"注册设备"，填写设备注册参数，完成后单击"确定"，请注意保存注册成功返回的"设备ID"和"设备密钥"。 
   图3设备-注册密钥设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001950367894.png "点击放大")
   
   | 参数名称  | 说明                                                        |
   |:---|:---|
   | 所属资源空间                 | **参数说明：** 选择[2]中创建的产品所在的资源空间。 |
   | 所属产品  | **参数说明：** 选择[2]中创建的产品。       |
   | 设备标识码 | **参数说明：**即node_id，填写为设备的IMEI、MAC地址或Serial No；若没有真实设备，填写自定义字符串，由英文字母和数字组成。   |
   | 设备名称                    | **参数说明：**自定义。                                                               |
   | 设备ID                     | **参数说明：**自定义，可不填，平台会自动生成一个设备ID。                                              |
   | 设备认证类型                     | **参数说明：**选择"密钥"。                                                              |
   | 密钥    | **参数说明：**设备密钥，可自定义，不填写物联网平台会自动生成。                                            |
      
   
   
6. 选择左侧导航栏的"规则\>数据转发"，进入数据转发页面，单击左上角的"创建规则"。 
   ![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
   您也可以基于已经创建的规则，在规则详情页面，添加新的转发目标PostgreSQL。
   
   
7. 参考下表参数说明，填写规则内容。以下参数取值仅为示例，您可参考[数据转发流程](https://support.huaweicloud.com/usermanual-iothub/iot_01_0024.html)填写具体的流转规则参数，填写完成后单击"创建规则"。
   
   表2创建规则参数说明 
   |   规则名称    |    自定义，如iotda-postgresql。    |
   |---|---|
   | **规则描述**  | 自定义，如数据转发至PostgreSQL存储。       |
   | **数据来源**   | 选择"设备属性"。                     |
   | **触发事件**  | 自动匹配"设备属性上报"。                 |
   | **资源空间** | 选择转发的数据来源所属的资源空间，或者所有资源空间。 |
      
   
   
8. 单击"设置转发目标"页签，单击"添加"，设置转发目标。 
   表3转发目标参数说明 
   |   转发目标    |                                                                         选择"云数据库 PostgreSQL(RDS)"                                                                          |
   |---|---|
   | **数据库实例地址** | 填写数据库实例的连接IP（或域名）和端口，RDS for PostgreSQL实例详情页面，单击"连接信息"获取。                                                                                                                    |
   | **数据库名称**    | 填写数据库实例中转发目标数据库名称。                                                                                                                                                         |
   | **访问账户**      | 填写数据库实例的账户。                                                                                                                                                                  |
   | **访问密码**   | 填写数据库实例的密码。                                                                                                                                                                  |
   | **SSL**      | 选择是否通过SSL加密方式连接数据库。 推荐使用SSL方式连接，不开启SSL方式连接可能存在数据传输安全风险。创建RDS for PostgreSQL实例时[默认开启SSL，实例创建完成后，不支持关闭](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_11_0029.html)。 |
   | **证书ID**     | Truststore证书，用于客户端校验服务端证书。用户可上传自定义证书或不填使用默认证书。转发至云数据库PostgreSQL(RDS)时使用默认证书                                                                                                 |
      
   
   
9. 单击"下一步：转发数据配置"，此过程会连接数据库。
10. 选择转存表格，配置流转数据和数据库表的映射关系。 
    - 转发字段：流转数据的json key。
    
    - 目标存储字段：数据库表的字段，选择目标存储字段后自动匹配字段类型。
    
    
    图4新建转发目标-设置Postgresql字段映射   
    ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000002253392889.png "点击放大")
    
    
11. 单击"启动规则"，激活配置好的数据转发规则。
 
#### 验证操作
1. 触发规则数据来源的事件，比如设备属性上报。 
   - 您可以使用配置设备接入服务时注册的真实设备接入平台，上报任意数据。
   
   - 您也可以使用模拟器模拟设备上报数据，操作方法请参考[在线开发MQTT协议的智慧路灯](https://support.huaweicloud.com/bestpractice-iothub/iot_bp_00016.html)。
   
   - 您也可以使用规则引擎提供的[连通性测试](https://support.huaweicloud.com/usermanual-iothub/iot_01_0036.html)，测试上报数据，本示例通过连通性测试进行验证。
   
   
   
   
2. 在连通性测试对话框的测试数据页签下，输入用于转发的测试数据，或单击右上角"模拟输入模板"，使用模板数据，然后单击"连通性测试"。 
   图5转发目标-连通性测试结果   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001951249578.png "点击放大")
   
   
3. 进入[PostgreSQL管理控制台](https://www.huaweicloud.com/product/pg.html)，登录PostgreSQL数据库，打开目标表格，可以查看到表格目标字段转存的数据。
   
   图6查询数据上报信息   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000002218388416.png "点击放大")
   
   
 
