通过SQL命令安装和卸载插件
本章节提供基于root用户的PostgreSQL插件管理方案,下列插件无需用户手动创建,其他插件均需要参考本章节内容手动创建。
- auto_explain
 - passwordcheck
 - pg_profile_pro
 - pg_sql_history
 - plpgsql
 - wal2json
 - test_decoding
 
 
   RDS for PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在对应的业务库上进行手动创建。
RDS for PostgreSQL 11及以上版本的最新小版本,支持以root用户通过社区的方式来创建(create extension)、删除(drop extension)插件。
创建插件
以root用户连接需要创建插件的数据库,执行如下SQL创建插件。
select control_extension('create','<EXTENSION_NAME>', '<SCHEMA>');
- EXTENSION_NAME为插件名称,请参见支持的插件列表。
 - SCHEMA为模式名称,指定创建插件的模式位置,不指定该参数时默认为public模式。
 
示例如下:
-- 指定创建插件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为插件名称,请参见支持的插件列表。
 - 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运维库,禁止创建插件。