
# 通过DAS登录RDS for PostgreSQL实例并创建数据库（推荐）
#### 操作场景
通过数据管理服务（Data Admin Service，简称DAS）这款可视化的专业数据库管理工具，可获得执行SQL、高级数据库管理、智能化运维等功能，做到易用、安全、智能地管理数据库。云数据库RDS服务默认开通DAS连接权限。推荐使用DAS连接实例。
#### 步骤1：登录RDS for PostgreSQL实例
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002606863935.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，在操作列单击"登录"，进入数据管理服务实例登录界面。 
   图1登录实例   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213662932.png "点击放大")
   您也可以在"实例管理"页面，单击目标实例名称，进入"概览"页面，在页面右上角单击"登录"，进入数据管理服务实例登录界面。
   图2登录实例   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213822696.png "点击放大")
   
   
4. 正确输入数据库用户名和密码，单击"登录"，即可进入您的数据库并进行管理。 
   - 登录用户名：root
   
   - 数据库名称：postgres
   
   - 密码：填写创建实例时设置的root密码。如果忘记密码，可以重置密码，详见[重置管理员密码和root账号权限](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_reset_password.html)。
   
   
   图3登录实例   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213662924.png "点击放大")
   
   
 
#### 步骤2：创建数据库
1. 在DAS界面，选择"SQL操作 \> SQL窗口"。
2. 在SQL窗口，执行以下命令创建数据库。 
   ```
   create database db1;
   ```
   您还可以指定模板库，并为每个数据库设置不同的字符集、LC_COLLATE（字符排序规则）和 LC_CTYPE（字符分类）等属性，详见[语法介绍]。
   
   
 
- [语法介绍]
  
  ```
  CREATE DATABASE name    
  [ [ WITH ] [ OWNER [=] user_name ]           
         [ TEMPLATE [=] template ]           
         [ ENCODING [=] encoding ]           
         [ LC_COLLATE [=] lc_collate ]           
         [ LC_CTYPE [=] lc_ctype ]           
         [ TABLESPACE [=] tablespace_name ]          
         [ ALLOW_CONNECTIONS [=] allowconn ]           
         [ CONNECTION LIMIT [=] connlimit ]          
         [ IS_TEMPLATE [=] istemplate ] ]
  ```
  - TEMPLATE RDS for PostgreSQL数据库默认有template0、template1两个模板，默认模板为template1，使用template1模板库建库时不可指定新的字符集，否则会报错。用户也可以指定其他的自定义模板创建数据库。
    
  
  - ENCODING 创建数据库时可以通过**WITH ENCODING** 指定字符集，字符集含义及支持的字符集类型请参考[PostgreSQL社区文档](https://www.postgresql.org/docs/12/multibyte.html)。
    
  
  - LC_COLLATE 字符排序规则，默认en_US.utf8。
    不同的排序规则下，相同字符串的比较其结果可能是不同的。
    例如，在en_US.utf8下， **SELECT 'a'\>'A';** 执行结果为false，但在'C'下，**SELECT 'a'\>'A';** 结果为true。如果数据库从Oracle迁移到RDS for PostgreSQL，数据库排序集需使用'C'才能得到一致的预期。支持的排序规则可以查询系统表 pg_collation。
    
  
  - LC_CTYPE 字符集中的字符分类，用来区分字母、数字、及大小写等，支持的字符分类可以查询系统表 pg_collation。
    
  
  - 其余参数请参考[PostgreSQL社区文档](https://www.postgresql.org/docs/12/multibyte.html)。
   
- [使用示例]
  
  - 通过**TEMPLATE** 指定数据库模板
    - 使用 template1 模板库建库时不可指定新的字符集和本地化collate属性，collate属性请参见[▪设置数据库的本土化信息（collate）]。
      ```
      CREATE DATABASE my_db WITH TEMPLATE template1 ;
      ```
      
    
    - 使用template0可指定字符集和本地化collate属性，collate属性请参见[▪设置数据库的本土化信息（collate）]。
      ```
      CREATE DATABASE my_db WITH ENCODING = 'UTF8' LC_COLLATE ='zh_CN.utf8' LC_CTYPE ='zh_CN.utf8' TEMPLATE = template0 ;
      ```
      
    
    - 创建数据库时不指定模板，则默认模板为template1。用户也可以指定其他的自定义模板创建数据库。
      ```
      CREATE DATABASE my_db WITH TEMPLATE = mytemplate;
      ```
      
     
  
  - 通过**WITH ENCODING** 指定字符集
    ```
    CREATE DATABASE my_db WITH ENCODING 'UTF8';
    ```
    
  
  - **LC_COLLATE** 和**LC_CTYPE**
    - 查询字符集支持的LC_COLLATE和LC_CTYPE信息
      ```
      SELECT pg_encoding_to_char(collencoding) AS encoding,collname,collcollate AS "LC_COLLATE",collctype AS "LC_CTYPE" FROM pg_collation;
      ```
      encoding为空时，表示当前LC_COLLATE支持所有的字符集。
      ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213822704.png "点击放大")
      
    
    - 设置数据库的本土化信息（collate）
      执行如下命令，创建一个 LC_COLLATE 和 LC_CTYPE 分别为 zh_CN.utf8 的数据库。
      ```
      CREATE DATABASE my_db WITH ENCODING = 'UTF8' LC_COLLATE ='zh_CN.utf8' LC_CTYPE ='zh_CN.utf8' TEMPLATE = template0 ;
      ```
      ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248782761.png "点击放大")
      如果指定的LC_COLLATE与字符集不兼容，则会报如下错误信息。
      ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248942649.jpg "点击放大")
      ![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
      1. 指定的LC_COLLATE和LC_CTYPE必须与目标字符集兼容，参考[查询字符集支持的LC_COLLATE和LC_CTYPE信息]中查询出的字符集，否则会报错。
      
      2. 目前无法直接通过**ALTER DATABASE**命令修改已有数据库的LC_COLLATE和LC_CTYPE信息，但可以通过创建新的数据库，然后导出再导入数据的方式进行修改。
        
     
   
#### 常见问题
#### 在实例列表的操作列单击"登录"时，无法跳转至DAS页面怎么办？
请将您的浏览器设置为允许弹出窗口，然后重试。
#### 权限不足导致实例连接失败怎么办？
1. 报错信息：您的权限不足。策略不允许执行 das:connections:xxx。 报错原因：您的账号没有添加DAS FullAccess权限。
   解决方法：请参考[创建用户并授权使用DAS](https://support.huaweicloud.com/usermanual-das/das_08_0003.html)，添加DAS FullAccess权限。
   
2. 报错信息：您没有执行此操作的权限，请联系您的管理员为您开通权限。 报错原因：您的账号没有添加DAS FullAccess权限。
   解决方法：请参考[创建用户并授权使用DAS](https://support.huaweicloud.com/usermanual-das/das_08_0003.html)，添加DAS FullAccess权限。
   
3. 报错信息：您当前登录的账号仅具有只读权限，不能执行此操作。为确保您顺利使用DAS，请添加DAS Administrator权限。 报错原因：您的账号没有添加DAS FullAccess权限。
   解决方法：请参考[创建用户并授权使用DAS](https://support.huaweicloud.com/usermanual-das/das_08_0003.html)，添加DAS FullAccess权限。
   
 
#### 通过DAS连接实例失败怎么办？
报错信息： FATAL: Invalid username/password,login denied。
报错原因：RDS实例用户名或密码不对。
解决方法：请确认数据库用户名或密码是否正确。如果不确定密码是否正确，可以到RDS控制台重置实例密码。
![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/notice_3.0-zh-cn.png)
修改密码可能会影响业务，请谨慎操作。
#### 如何查看已经创建的数据库以及数据库的字符集、LC_COLLATE和LC_CTYPE信息
- 通过psql元命令**\\ l** ，可以查看已经创建的数据库。
  ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248782757.png "点击放大")
  
- 通过查询系统表pg_database，查看数据库的字符集、LC_COLLATE和LC_CTYPE信息。 ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213662928.png "点击放大")
  
 
#### 创建数据库时报字符集与locale不匹配如何解决
选择与字符集不匹配的LC_COLLATE创建数据库时会报如下错误。
```
CREATE DATABASE my_db2 WITH LC_COLLATE ='zh_SG' LC_CTYPE ='zh_SG' ;
```
![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213822708.jpg "点击放大")
解决方法：
1. 查询模板库支持的字符集，请参见[如何查看已经创建的数据库以及数据库的字符集、LC_COLLATE和LC_CTYPE信息]。默认模板库为template1。
2. 查询模板库字符集支持的LC_COLLATE信息，查询方法见[使用示例]。
3. 修改为与字符集匹配的LC_COLLATE，重新创建数据库。
 
#### 后续操作
登录实例后，您可以创建数据库，进行数据迁移等操作，具体请参见：
- [通过界面可视化创建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)
 
