本文分享自华为云社区《【云小课】【第42课】RDS for PostgreSQL插件介绍》,作者:数据库的小云妹。
本文介绍RDS for PostgreSQL支持的插件及不同插件的创建、删除或使用方法。
PostgreSQL插件简介
PostgreSQL是开源数据库中经典的大型关系型数据库之一,它不仅具备经典关系型数据库的功能,而且在不断发展。PostgreSQL的发展不仅受到了很多基于PostgreSQL外部应用的影响,而且发展出了更多基于PostgreSQL的应用,例如PostGIS(GIS领域中重要组件)。从技术角度讲,PostGIS是PostgreSQL的一个扩展(extension),即插件。像PostGIS这样的插件已经在计算机相关的领域中都得到不同程度的应用,它成为PostgreSQL功能延展性的主要特点。
PostgreSQL插件的功能不仅体现在新增复杂的数据类型、索引等数据的基本功能上,这些基本功能也是GIS领域所特别需要的,并且PostgreSQL的插件可以完成包括分布式、异构数据访问等的各种高级功能。这使得PostgreSQL数据库不仅仅是一个传统的经典关系型数据库,并且通过插件的扩展功能,它完全可以满足今天互联网对于大数据应用的需求。
RDS for PostgreSQL插件列表
RDS for PostgreSQL和社区版PostgreSQL一样,也支持通过插件,实现更多的扩展功能。当前RDS for PostgreSQL支持的插件如下表所示:
| 插件名称 | PostgreSQL 9.5 | PostgreSQL 9.6 | PostgreSQL 10 | PostgreSQL 11 | PostgreSQL 增强版 | PostgreSQL 12 | PostgreSQL 13 |
|---|---|---|---|---|---|---|---|
| address_standardizer | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 3.0.0 | 3.1.0 |
| address_standardizer_data_us | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 3.0.0 | 3.1.0 |
| amcheck | 无 | 无 | 无 | 1.1 | 1.1 | 1.2 | 1.2 |
| auto_explain | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| bloom | 无 | 无 | 无 | 1.0 | 1.0 | 1.0 | 1.0 |
| btree_gin | 1.0 | 1.0 | 1.2 | 1.3 | 1.3 | 1.3 | 1.3 |
| btree_gist | 1.1 | 1.2 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 |
| citext | 1.1 | 1.3 | 1.4 | 1.5 | 1.5 | 1.6 | 1.6 |
| cube | 1.0 | 1.2 | 1.2 | 1.4 | 1.4 | 1.4 | 1.4 |
| dblink | 1.1 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| dict_int | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| dict_xsyn | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| earthdistance | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| fuzzystrmatch | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| hll | 2.12 | 2.12 | 2.12 | 2.12 | 2.12 | 2.14 | 2.15.1 |
| hstore | 1.3 | 1.4 | 1.4 | 1.5 | 1.5 | 1.6 | 1.7 |
| icu | 无 | 无 | 无 | 1.0 | 1.0 | 1.0 | 1.0 |
| intagg | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| intarray | 1.0 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.3 |
| isn | 1.0 | 1.1 | 1.1 | 1.2 | 1.2 | 1.2 | 1.2 |
| ltree | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.2 |
| mysql_fdw | 无 | 无 | 无 | 2.5.5 | 2.5.5 | 2.5.5 | 2.5.5 |
| oracle_fdw | 无 | 无 | 2.1.0 | 2.1.0 | 2.1.0 | 2.2.0 | 2.3.0 |
| orafce | 3.8.0 | 3.8.0 | 3.8.0 | 3.8.0 | 0 | 3.8.0 | 3.14.0 |
| pageinspect | 1.3 | 1.5 | 1.6 | 1.7 | 1.7 | 1.7 | 1.8 |
| passwordcheck | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| pg_bigm | 无 | 无 | 无 | 1.2_20200228 | 1.2_20200228 | 1.2_20200228 | 1.2_20200228 |
| pg_buffercache | 1.1 | 1.2 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
| pg_cron | 无 | 无 | 无 | 无 | 无 | 1.2.0 | 1.3.0 |
| pg_freespacemap | 1.0 | 1.1 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| pg_hint_plan | 1.1.5 | 1.2.0 | 1.3.0 | 1.3.5 | 1.3.5 | 1.3.7 | 1.3.7 |
| pg_jieba | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 2.0.1 |
| pg_pathman | 1.5.8 | 1.5.8 | 1.5.8 | 1.5.8 | 1.5.8 | 1.5.12 | 1.5.12 |
| pg_prewarm | 1.0 | 1.1 | 1.1 | 1.2 | 1.2 | 1.2 | 1.2 |
| pg_repack | 1.4.6 | 1.4.6 | 1.4.6 | 1.4.6 | 1.4.6 | 1.4.6 | 1.4.6 |
| pg_roaringbitmap | 无 | 无 | 无 | 0.5.2 | 0.5.2 | 0.5.2 | 0.5.2 |
| pg_stat_statements | 1.3 | 1.4 | 1.6 | 1.6 | 1.6 | 1.7 | 1.8 |
| pg_trgm | 1.1 | 1.3 | 1.3 | 1.4 | 1.4 | 1.4 | 1.5 |
| pg_visibility | 无 | 无 | 无 | 1.2 | 1.2 | 1.2 | 1.2 |
| pgcrypto | 1.2 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
| pglogical | 无 | 无 | 无 | 2.3.3 | 2.3.3 | 2.3.3 | 2.3.3 |
| pg_profile_pro | 无 | 无 | 无 | 无 | 无 | 1.0 | 无 |
| pgrouting | 无 | 无 | 无 | 3.1.0 | 3.1.0 | 3.1.0 | 3.1.3 |
| pgrowlocks | 1.1 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
| pg_sql_history | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| pgsql-ogr-fdw | 无 | 无 | 无 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 |
| pgstattuple | 1.3 | 1.4 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 |
| plpgsql | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| plperl | 无 | 无 | 无 | 1.0 | 1.0 | 1.0 | 1.0 |
| plproxy | 无 | 无 | 无 | 2.10.0 | 2.10.0 | 2.10.0 | 2.10.0 |
| plv8 | 无 | 无 | 无 | 2.3.15 | 2.3.15 | 2.3.15 | 2.3.15 |
| postgis | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 3.0.0 | 3.1.0 |
| postgis_raster | 集成到postgis | 集成到postgis | 集成到postgis | 集成到postgis | 集成到postgis | 3.0.0 | 3.1.0 |
| postgis_sfcgal | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 3.0.0 | 3.1.0 |
| postgis_tiger_geocoder | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 3.0.0 | 3.1.0 |
| postgis_topology | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 2.5.1 | 3.0.0 | 3.1.0 |
| postgres_fdw | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| postgres-decoderbufs | 无 | 无 | 无 | 1.3.1 | 1.3.1 | 1.3.1 | 1.3.1 |
| postgresql_anonymizer | 无 | 无 | 无 | 0.7.1 | 0.7.1 | 0.7.1 | 0.7.1 |
| q3c | 无 | 无 | 无 | 2.0.0 | 2.0.0 | 2.0.0 | 2.0.0 |
| rum | 无 | 无 | 无 | 1.3.7 | 0 | 1.3.7 | 1.3.7 |
| sslinfo | 无 | 无 | 无 | 1.2 | 1.2 | 1.2 | 1.2 |
| tablefunc | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| tds_fdw | 无 | 无 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.2 |
| test_decoding | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| timescaledb | 0 | 1.3.2 | 1.3.2 | 1.3.2 | 1.3.2 | 1.7.0 | 2.1.0 |
| tsm_system_rows | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| tsm_system_time | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| unaccent | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| uuid-ossp | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| wal2json | 无 | 无 | 无 | 2.3 | 2.3 | 2.3 | 2.3 |
| xml2 | 无 | 无 | 无 | 1.1 | 1.1 | 1.1 | 1.1 |
| zhparser | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
- 表中的数据均来源于PostgreSQL引擎各个版本,最新小版本支持的插件列表。
- 您可以通过**SELECT name FROM pg_available_extensions;**查看当前实例支持的插件列表。如果当前实例的版本不支持某个插件,您可以将当前实例迁移至新版本实例,迁移方法请参考迁移方案概览。
- 使用mysql_fdw、oracle_fdw、pgsql-ogr-fdw、postgres_fdw和tds_fdw等需要跨数据库实例访问的插件时,需确保两个数据库实例的服务端IP必须在同一个VPC和子网内。
- 具有公测权限的用户才可使用RDS for PostgreSQL 13,您可以提交工单申请。
创建RDS for PostgreSQL插件
- RDS for PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在业务所在数据库上进行手动创建。
- RDS for PostgreSQL的以下插件不需要通过手动创建或删除:
- auto_explain
- passwordcheck
- pg_profile_pro
- pg_sql_history
- plpgsql
- wal2json
- test_decoding
- RDS for PostgreSQL 11、RDS for PostgreSQL 增强版、RDS for PostgreSQL 12和RDS for PostgreSQL 13的最新小版本,支持以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用户的密码。
Password for user root:
如果执行操作为:由普通用户user1创建的数据库db1,您需要先使用普通用户user1登录数据库db1(登录方式参考上述内容),然后执行如下命令将数据库db1的权限授予root用户。
GRANT ALL ON DATABASE db1 TO 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
- 以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用户的密码。
Password for user 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)
删除RDS for PostgreSQL插件
- RDS for PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在业务所在数据库上进行手动创建。
- RDS for PostgreSQL的以下插件不需要通过手动创建或删除:
- auto_explain
- passwordcheck
- pg_profile_pro
- pg_sql_history
- plpgsql
- wal2json
- test_decoding
- RDS for PostgreSQL 11、RDS for PostgreSQL 增强版、RDS for PostgreSQL 12和RDS for PostgreSQL 13的最新小版本,支持以root用户通过社区的方式来创建(create extension)、删除(drop extension)插件。
执行如下命令,以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用户的密码。
Password for user 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)
RDS for PostgreSQL插件说明
| 插件名称 | 插件说明 |
|---|---|
| postgis | 创建postgis插件时,会同步创建以下插件:postgis、postgis_topology、fuzzystrmatch、postgis_tiger_geocoder、address_standardizer及address_standardizer_data_us。创建的postgis插件版本如果大于等于3.0.0,创建postgis插件时会同步创建postgis_raster插件。创建postgis插件时,主备实例的主机创建插件后,请先断开备机已经建立的连接,备机需要重新建立连接更新search_path设置。对于PostgreSQL增强版实例,创建postgis插件前,需要在控制台上将实例参数“empty_is_null”设置为“OFF”。 |
| plpgsql | plpgsql 1.0插件支持提供SQL过程语言,默认内置安装,无需手动创建该插件。 |
| earthdistance | 安装earthdistance插件前,请先安装cube插件。 |
| cube | 如果已安装earthdistance插件,删除cube插件会导致earthdistance插件不可用。 |
| timescaledb | RDS for PostgreSQL的timescaledb插件不支持tsl协议的特性,具体如下:add_compress_chunks_policyadd_drop_chunks_policy add_reorder_policy alter_job_schedule compress_chunk decompress_chunk drop_chunks interpolate locf move_chunk remove_compress_chunks_policy remove_drop_chunks_policy remove_reorder_policy reorder_chunk set_integer_now_func time_bucket_gapfill |
| wal2json | 该插件是逻辑复制插件,您可以直接使用该插件,不需要通过control_extension安装。 |
| pg_profile_pro | 因发现插件存在缺陷,现暂时关闭支持,我们会在缺陷修复后重新开放,给您造成不便敬请谅解。 |
| pg_repack | pg_repack可以使用最小的锁资源来重新整理表和索引的物理页面,从而实现物理页面的碎片整理。相较于使用cluster和vacuumn full重写表,pg_repack不需要在整个处理期间持有表级排他锁,因此能提供近似的在线服务。具体操作请参考使用pg_repack插件。 |