
# CREATE PLUGGABLE DATABASE
#### 功能描述
创建一个新的Pluggable Database（PDB），即内核多租特性中租户的概念，是一种特殊的Database，也可以被看作是在一个数据库实例中被划分出来的逻辑实例。
#### 注意事项
- 不能在事务块中执行创建PDB的DDL语句，包括CREATE、ALTER、DROP。
- 只能在GUC参数enable_mtd为on的状态下使用。
- 只能在非PDB中进行该操作。不支持在M兼容数据库中执行该命令。
- 操作用户需要为gs_role_create_pdb的角色，或拥有sysadmin权限。
- 最多可以创建128个用户PDB。
- 在创建数据库过程中，出现类似"Permission denied"的错误提示，可能是由于文件系统上数据目录的权限不足。出现类似"No space left on device"的错误提示，可能是由于磁盘满引起的。
- 在兼容性选项缺省的情况下，将创建A兼容模式PDB。
- 若安装数据库实例时没有指定初始化账户密码，且初始化账户名字区分大小写，且新创建的PDB为M-Compatibility模式数据库的情况下，需要在开启并使用该PDB前，先在命令行执行以下语句，使数据库将双引号中的内容作为对象引用进行处理。语句执行后再开启并使用该PDB，按照提示重置始账户密码。
  ```
  gs_guc set --pdbname my_pdb -Z datanode -N all -I all -c "sql_mode = 'ansi_quotes'" # my_pdb为新建的PDB名
  ```
  （该举是为保证能正常为新PDB设置账户密码，后续操作可以按需重置sql_mode参数）
  
 
#### 语法格式
```
CREATE PLUGGABLE DATABASE pdb_name
    [ [ WITH ] { [ ENCODING [=] 'encoding' ] |
               [ LC_COLLATE [=] 'lc_collate' ] |
               [ LC_CTYPE [=] 'lc_ctype' ] |
               [ DBCOMPATIBILITY [=] 'compatibility_type' ] |
               [ DBTIMEZONE [=] 'time_zone' ] }];
```
#### 参数说明
- **pdb_name**
  PDB名称。
  取值范围：字符串，要符合[标识符命名规范](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0330.html#ZH-CN_TOPIC_0000002558947985__zh-cn_topic_0000002527058134_section1257443811315)。此外PDB名不能带"$"符号。
  
- **ENCODING \[ = \] 'encoding** '
  可选。指定数据库使用的字符编码，可以是字符串（如'SQL_ASCII'）、整数编号。
  不指定时，对于M-Compatibility数据库，默认使用utf8编码；其他默认使用模板数据库的编码。模板数据库template0、template1和templatea的编码默认与操作系统环境相关。template1不允许修改字符编码，因此若要变更编码，A兼容模式数据库请使用templatea创建数据库， 非A兼容模式数据库请使用template0创建数据库。
  常用取值：GBK、UTF8、Latin1、GB18030等。
  
- **LC_COLLATE \[ = \] 'lc_collate** '
  可选。指定新数据库使用的字符集。例如，通过lc_collate = 'zh_CN.gbk'设定该参数。
  该参数的使用会影响到对字符串的排序顺序（如使用ORDER BY执行，以及在文本列上使用索引的顺序）。默认是使用模板数据库的字符集。该参数对M-Compatibility数据库不生效。
  取值范围：操作系统支持的字符集。
  
- **LC_CTYPE \[ = \] 'lc_ctype** '
  可选。指定新数据库使用的字符分类。例如，通过lc_ctype = 'zh_CN.gbk'设定该参数。该参数的使用会影响到字符的分类，如大写、小写和数字。默认是使用模板数据库的字符分类。该参数对M-Compatibility数据库不生效。
  取值范围：操作系统支持的字符分类。
  
- **DBCOMPATIBILITY \[ = \] compatibility_type**
  可选。指定兼容的数据库的类型，默认兼容O。
  取值范围：A、C、PG、M。分别表示兼容O、TD、POSTGRES和M-Compatibility。
  
- **DBTIMEZONE \[ = \] time_zone**
  指定新数据库的时区。例如，通过DBTIMEZONE = '+00:00'设定该参数。该参数会影响新数据库的时区。默认设置为PRC时区。
  前提条件：当前连接数据库是A兼容、a_format_version='10c'、a_format_dev_version='s2'。
  取值范围：操作系统支持的时区名称和缩写或者-15：59到+15：00时间戳范围。
  
 
#### 示例
- 前置条件。 完成多租数据库实例的安装。
  

- 创建PDB。
  ```
  --使用系统管理员连接postgres数据库，创建资源计划指令的创建。
  gaussdb=# call resource_manager.create_pending_area();
   create_pending_area 
  ---------------------
  (1 row)
  --由于该接口是创建资源，是否成功与当前实例资源规格有关。如遇到接口报错，请根据错误描述进行参数调整参数后重新尝试。
  gaussdb=# CALL resource_manager.create_resource_plan_directive(pdb_name =>'my_pdb', min_cpu => 4, max_dynamic_memory => '18022MB', max_shared_memory => '14745MB', io_limits=> 300, io_priority => 'High', max_connections => 880);
   create_resource_plan_directive 
  --------------------------------
  (1 row)
  gaussdb=# CALL resource_manager.submit_pending_area();
   submit_pending_area 
  ---------------------
  (1 row)
  --使用系统管理员连接postgres数据库，创建PDB。
  gaussdb=# CREATE PLUGGABLE DATABASE my_pdb;
  CREATE PLUGGABLE DATABASE
  ```
  
 
#### 相关链接
[CREATE DATABASE](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0541.html#ZH-CN_TOPIC_0000002527988246)
