# CREATE EXTENSION
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
扩展功能为内部使用功能，目前仅允许创建（安装）数据库内部的高级包或扩展。当前仅支持创建（安装）postgis、postgis_sfcgal、postgis_raster、postgis_topology、yukon_geomodel、yukon_geogridcoder、pkg_bpchar_opc以及tablefunc。
#### 功能描述
安装一个扩展。
#### 注意事项
- 在执行该命令将扩展安装到数据库之前，必须先完成该扩展所依赖文件（即扩展本身）的安装。
- 同一数据库中不得存在同名的扩展。若需避免因名称冲突导致的扩展安装失败场景，应在安装扩展前确认目标扩展名未被占用。
- 若数据库中存在与待安装的扩展同名的数据库对象（PACKAGE、同义词、操作符、目录、函数、存储过程、视图以及表）时，将会导致安装失败。
- 安装扩展即执行其对应的扩展脚本文件。该脚本将创建一个新的SQL实体，包括但不限于：函数、数据类型、操作符和索引支持的方法。
- 安装扩展需要拥有与创建扩展的组件对象相同的权限。对于大多数扩展，这意味着需要拥有数据库所有者的权限，对于后续的权限检查和该扩展脚本所创建的实体，运行CREATE EXTENSION命令的角色将成为扩展的所有者。
- 数据库默认禁止直接创建扩展，原因在于：扩展可能会引发非预期的错误，且在数据库升级后可能面临兼容性的问题。如果需要创建扩展，需要设置enable_extension为true才能创建。
- 创建扩展时，如果GUC参数enable_object_special_character为off，且扩展的脚本文件中使用@extschema@占位符，则扩展控制文件中schema参数的值不能包含以下任一特殊字符：\[、"、$、'、\\以及\]。
 
#### 语法格式
```
CREATE EXTENSION [ IF NOT EXISTS ] extension_name
[ WITH ] [ SCHEMA schema_name ]
[ VERSION version ]
[ FROM old_version ];
```
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002764469560.png "点击放大")
#### 参数说明
- **IF NOT EXISTS**
  创建扩展时，用于判断是否存在同名的扩展。
  如果指定IF NOT EXISTS关键字，创建扩展前会在当前数据库中查找是否已存在同名的扩展，若存在同名扩展，则不会创建并返回NOTICE提示；未指定IF NOT EXISTS关键字时，若存在同名扩展，则直接返回ERROR告警。
  

- **extension_name**
  待安装的扩展名称，数据库中将使用文件SHAREDIR/extension/extension_name.control中的详细信息创建扩展。
  

- **schema_name**
  创建扩展过程中，指定扩展脚本文件所创建的函数、数据类型等对象所属的具体模式，指定的模式必须存在。如果创建扩展时脚本文件所创建的对象所属模式（即该选项）以及扩展的控制文件均未指定具体模式，则使用默认模式进行创建。
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  扩展所依赖文件（即扩展本身）不属于任何模式，其名称在数据库范围内唯一，不受模式约束；但对于扩展创建的对象（函数、数据类型等），其属于某个具体的模式。
  

- **version**
  指定安装扩展的版本，可以作为一个标识符或者字符串，默认的版本在扩展的控制文件中指定。
  

- **old_version**
  当且仅当需要升级安装已有模块中不存在的内容时，才需要指定FROM old_version。通过CREATE EXTENSION FROM old_version命令运行安装脚本，将新的内容安装到已有模块的扩展中，而不是创建新的对象。特别说明，需要指定Schema为包含这些已存在对象的对应模式。
  
 
#### 示例
在当前数据库安装扩展。例如安装security_plugin：
```
--安装扩展之前需要设置enable_extension为true才能够创建。
gaussdb=# SET enable_extension = true;
--安装扩展。
gaussdb=# CREATE EXTENSION IF NOT EXISTS security_plugin;
--删除扩展。
gaussdb=# DROP EXTENSION security_plugin;
```
