更新时间:2024-04-11 GMT+08:00

创建和删除插件

提供基于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)插件。

创建插件

  1. root用户连接数据库,以database1为例,并使用模板库template1创建需要支持插件的数据库。

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --dbname=database1 --username=root -c "create database <DB_NAME> template template1;"

    • RDS_ADDRESS为RDS实例的IP地址。
    • DB_PORT为RDS数据库实例的端口。
    • DB_NAME为需要创建插件的数据库名称。

    根据提示输入root用户密码。

    创建需要支持插件的数据库my_extension_db示例如下:

    # psql --host=192.168.6.141 --port=5432 --dbname=database1 --username=root -c "create database my_extension_db template template1;"

    Password for user root:
    CREATE DATABASE

    注:如果需要操作的是普通用户user1创建的数据库db1,需要先以普通用户user1登录db1(登录方式参考上述内容),然后执行如下语句将db1权限授予root用户:

    GRANT ALL ON DATABASE db1 TO root;

  2. root用户连接需要支持插件的数据库,并创建插件。

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --dbname=<DB_NAME> --username=root -c "select control_extension('create','<EXTENSION_NAME>');"

    • RDS_ADDRESS为RDS实例的IP地址。
    • DB_PORT为RDS数据库实例的端口。
    • DB_NAME为需要创建插件的数据库名称。
    • EXTENSION_NAME为插件名称,请参见支持的插件列表

    根据提示输入root用户密码。

    在数据库my_extension_db中创建postgis插件示例如下:

    # psql --host=192.168.6.141 --port=5432 --dbname=my_extension_db --username=root -c "select control_extension('create','postgis');"

    Password for user root: 
          control_extension       
    ------------------------------
     create postgis successfully.
    (1 row)

删除插件

root用户连接已创建插件的数据库,并删除插件。

# psql --host=<RDS_ADDRESS> --port=<DB_PORT> --username=root --dbname=<DB_NAME> -c "select control_extension ('drop','<EXTENSION_NAME>');"

  • RDS_ADDRESS为RDS实例的IP地址。
  • DB_PORT为RDS数据库实例的端口。
  • DB_NAME为需要创建插件的数据库名称。
  • EXTENSION_NAME为插件名称,请参见支持的插件列表

根据提示输入root用户密码。

示例如下:

# psql --host=192.168.6.141 --port=5432 --dbname=my_extension_db --username=root -c "select control_extension('drop','postgis');"

Password for user root: 
     control_extension      
----------------------------
 drop postgis successfully.
(1 row)