更新时间:2022-12-22 GMT+08:00

创建和删除插件

提供基于root用户的PostgreSQL插件管理方案,其中关系型数据库会自动创建auto_explain插件,其他插件需用户手动创建。

PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在对应的业务库上都进行手动创建。

创建插件

  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为插件名称,请参见RDS for PostgreSQL引擎支持的插件

    根据提示输入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为插件名称,请参见RDS for PostgreSQL引擎支持的插件

根据提示输入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)