创建和删除插件
提供基于root用户的PostgreSQL插件管理方案,其中关系型数据库会自动创建auto_explain插件,其他插件需用户手动创建。
PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在对应的业务库上都进行手动创建。
PostgreSQL 11、12的最新小版本,支持以root用户通过社区的方式来创建(create extension)、删除(drop extension)插件。
创建插件
- 以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;
- 以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)