
# 通过SQL命令安装和卸载插件
本章节提供基于root用户的PostgreSQL插件管理方案，下列插件无需用户手动创建，其他插件均需要参考本章节内容手动创建。
- auto_explain
- passwordcheck
- pg_profile_pro
- pg_sql_history
- plpgsql
- wal2json
- test_decoding
![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
RDS for PostgreSQL插件是数据库级生效，并不是全局生效。因此创建插件时需要在对应的业务库上进行手动创建。
RDS for PostgreSQL 11及以上版本的最新小版本，支持以root用户通过社区的方式来创建(create extension)、删除(drop extension)插件。
#### 创建插件
以**root**用户连接需要创建插件的数据库，执行如下SQL创建插件。
**select control_extension('create','** *\<EXTENSION_NAME\>* **', '** *\<SCHEMA\>* **');**
- EXTENSION_NAME为插件名称，请参见[支持的插件列表](https://support.huaweicloud.com/usermanual-rds-pg/rds_09_0045.html)。
- SCHEMA为模式名称，指定创建插件的模式位置，不指定该参数时默认为**public**模式。
示例如下：
创建postgis插件，创建位置为**public schema** 。
```
-- 指定创建插件schema位置为public
select control_extension('create','postgis', 'public');
       control_extension       
 ------------------------------
  create postgis successfully.
 (1 row)
-- schema参数未指定时，默认schema位置为public
select control_extension('create', 'postgis');
      control_extension       
------------------------------
 create postgis successfully.
(1 row)
```
#### 删除插件
以**root**用户连接需要删除插件的数据库，执行如下SQL删除插件。
**select control_extension('drop','** *\<EXTENSION_NAME\>* **', '** *\<SCHEMA\>* **');**
- EXTENSION_NAME为插件名称，请参见[支持的插件列表](https://support.huaweicloud.com/usermanual-rds-pg/rds_09_0045.html)。
- SCHEMA为模式名称，在删除插件时参数无意义，可以不指定该参数。
示例如下：
```
select control_extension('drop','postgis');
      control_extension      
 ----------------------------
  drop postgis successfully.
 (1 row)
```
#### 常见报错
- 场景一
  ```
  ERROR:  permission denied for function control_extension
  ```
  解决方法：未使用**root** 用户执行**control_extension** 函数，需更改连接用户为**root**。
  
- 场景二
  ```
  ERROR:  function control_extension(unknown, unknown) is not unique
  ```
  解决方法：在不指定schema时，可能存在同名函数，导致函数不唯一无法运行，可选择添加schema参数重试。
  
- 场景三
  ```
  ERROR:  function control_extension(unknown, unknown) does not exist
  ```
  解决方法：**control_extension**函数在postgres库不存在，postgres库作为RDS运维库，禁止创建插件。
  
 
