
# 创建数据库
#### 操作场景
云数据库RDS实例创建成功后，您可根据业务需要，创建更多数据库。
#### 约束限制
- 恢复中的实例，不可进行该操作。
- 目前不支持创建同名数据库。
- 数据库创建完成后不支持修改库名。
 
#### 创建数据库
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002606863935.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，单击实例名称，进入实例的"概览"页。
4. 在左侧导航栏，单击"数据库与账号管理"。
5. 默认在"数据库管理"页签下，单击"创建数据库"，在弹出框中填写数据库信息，单击"确定"。 
   图1创建数据库   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002465024529.png "点击放大")
   表1参数说明 
   | 参数        | 说明                                                                                                                                                                                      |
   |:---|:---|
   | 数据库名称     | 长度可在1～63个字符之间，由字母、数字、或下划线组成，不能包含其他特殊字符，不能以"pg"和数字开头，且不能和RDS for PostgreSQL模板库重名。RDS for PostgreSQL模板库包括postgres， template0 ，template1。                                                  |
   | 字符集       | 默认utf8，您可根据业务进行选择。                                                                                                                                                                      |
   | Template  | 指定模板数据库，将以该数据库为模板创建新的数据库。其中template1经RDS适配改造（默认选项），template0遵循社区PostgreSQL设置。 使用template1模板库建库时只能使用默认字符集，否则会报错。                                         |
   | Collation | 字符排序规则，默认en_US.utf8。支持的排序规则，可以查询系统表pg_collation。请注意，不同的排序规则下，相同的比较其结果可能是不同的。例如，在en_US.utf8下， select 'a'\>'A';为false，但在'C'下，select 'a'\>'A';为true。如果从Oracle迁移到PostgreSQL，使用'C'才能得到一致的预期。 |
   | Ctype     | 在新数据库中使用的字符分类（LC_CTYPE）会影响字符的类别，如小写、大写和数字。默认使用模板数据库的字符分类。支持的字符分类，可以查询系统表pg_collation。                                                                                                   |
   | 备注        | 长度可在0\~512个字符之间。                                                                                                                                                                        |
      
   
   
6. 数据库创建成功后，您可在当前实例的数据库列表中，对其进行管理。
 
#### 常见问题
#### RDS for PostgreSQL数据库创建失败怎么办？
**场景一**
- 创建数据库SQL命令：
  ```
  CREATE DATABASE "db_test" ENCODING 'EUC_CN' TEMPLATE 'template1' LC_COLLATE 'zh_CN' LC_CTYPE 'zh_CN';
  ```
  报错信息：
  ```
  ERROR:  new encoding (EUC_CN) is incompatible with the encoding of the template database (UTF8)
  HINT:  Use the same encoding as in the template database, or use template0 as template.
  ```
  
- 问题原因及解决方法 使用template1为模板创建数据库时，所有设置（包括字符集，Collation，Ctype）必须与template1完全一致。如果要使用新的设置，需要以template0为模板创建数据库。更多信息，详见[PostgreSQL社区文档](https://www.postgresql.org/docs/current/manage-ag-templatedbs.html)。
  使用template0作为模板库，使用以下命令可创建成功：
  ```
  CREATE DATABASE "db_test" ENCODING 'EUC_CN' TEMPLATE 'template0' LC_COLLATE 'zh_CN' LC_CTYPE 'zh_CN';
  ```
  
**场景二**
- 创建数据库SQL命令：
  ```
  CREATE DATABASE "db_test" ENCODING 'EUC_CN' TEMPLATE 'template0';
  ```
  报错信息：
  ```
  ERROR:  encoding "EUC_CN" does not match locale "en_US.UTF-8"
  DETAIL:  The chosen LC_CTYPE setting requires encoding "UTF8".
  ```
  
- 问题原因及解决方法 上述报错说明数据库的字符集与数据库的LC_CTYPE或者LC_COLLATE区域设置不兼容。
  - 从报错提示可以明确需要使用的字符集为"UTF8"。根据提示信息，创建数据库SQL命令可做如下调整：
    ```
    CREATE DATABASE "db_test" ENCODING 'UTF8' TEMPLATE 'template0';
    ```
    
  
  - 如果需要使用EUC_CN字符集，则可根据如下SQL查询该字符集对应的LC_CTYPE和LC_COLLATE。
    ```
    select 
      pg_encoding_to_char(collencoding) as ENCODING, 
      collname, 
      collcollate as "collcollate(LC_COLLATE)", 
      collctype as "collctype(LC_Ctype)" 
    from 
      pg_collation 
    where 
      pg_encoding_to_char(collencoding) = 'EUC_CN';
    ```
    SQL执行结果：
    ```
    encoding |   collname   | collcollate(LC_COLLATE) | collctype(LC_Ctype) 
    ----------+--------------+-------------------------+---------------------
     EUC_CN   | zh_CN        | zh_CN                   | zh_CN
     EUC_CN   | zh_CN.gb2312 | zh_CN.gb2312            | zh_CN.gb2312
     EUC_CN   | zh_SG        | zh_SG                   | zh_SG
     EUC_CN   | zh_SG.gb2312 | zh_SG.gb2312            | zh_SG.gb2312
    (4 rows)
    ```
    根据SQL执行结果，选取EUC_CN对应的LC_CTYPE，LC_COLLATE设置。可将创建数据库SQL改为如下命令（用户根据业务选择合适的LC_CTYPE，LC_COLLATE）：
    ```
    CREATE DATABASE "db_test" ENCODING 'EUC_CN' TEMPLATE 'template0' LC_COLLATE 'zh_CN' LC_CTYPE 'zh_CN';
    ```
    其中C与POSIX支持所有的字符集编码，LC_CTYPE，LC_COLLATE除上述结果外也可以设置为C或者POSIX。
    
   
 
