更新时间:2024-09-05 GMT+08:00

通过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模式。

示例如下:

创建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为插件名称,请参见支持的插件列表
  • 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运维库,禁止创建插件。