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