
# CREATE EXTENSION
![](https://support.huaweicloud.com/distributed-devg-v8-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进行CREATE EXTENSION操作。
#### 功能描述
安装一个扩展。
#### 注意事项
- 在使用CREATE EXTENSION载入扩展到数据库中之前，必须先安装好该扩展的支持文件。
- CREATE EXTENSION命令安装一个新的扩展到一个数据库中，必须保证没有同名的扩展已经被安装。
- 安装一个扩展意味着执行一个扩展的脚本文件，这个脚本会创建一个新的SQL实体，例如函数、数据类型、操作符和索引支持的方法。
- 安装扩展需要有和创建他的组件对象相同的权限。对于大多数扩展这意味着需要超户或者数据库所有者的权限，对于后续的权限检查和该扩展脚本所创建的实体，运行CREATE EXTENSION命令的角色将变为扩展的所有者。
- CREATE EXTENSION时如果数据库中存在与EXTENSION内同名的PACKAGE、同义词、操作符、目录、函数、存储过程、视图、表这些数据库对象，将会导致CREATE EXTENSION失败。
- 数据库禁止直接创建扩展，因为扩展可能会引起非预期的错误，且在升级后面临不兼容的问题。如果需要创建扩展，需要设置**enable_extension**为true才能够创建。
- 创建扩展时，如果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-devg-v8-gaussdb/figure/zh-cn_image_0000002558217075.png "点击放大")
#### 参数说明
- **IF NOT EXISTS**
  如果系统已经存在一个同名的扩展，不会报错。这种情况下会给出一个提示。请注意该参数不保证系统存在的扩展和现在脚本创建的扩展相同。
  

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

- **schema_name**
  扩展的实例被安装在该模式下，扩展的内容可以被重新安装。指定的模式必须已经存在，如果没有指定，扩展的控制文件也不指定一个模式，这样将使用默认模式。
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
  扩展不属于任何模式，扩展在一个数据库范围内的名字是不受限制的，但是一个扩展的实例是属于一个模式的。
  

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

- **old_version**
  当需要升级安装"old style" 模块中没有的内容时,需要指定FROM old_version。通过CREATE EXTENSION运行一个安装脚本将新的内容安装到扩展中，而不是创建一个新的实体。注意：SCHEMA指定了包括这些已存在实体的模式。
  
 
