教你如何使用RDS for PostgreSQL插件

484 阅读6分钟

本文分享自华为云社区《【云小课】【第42课】RDS for PostgreSQL插件介绍》,作者:数据库的小云妹。

云小课必用.png

本文介绍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.5PostgreSQL 9.6PostgreSQL 10PostgreSQL 11PostgreSQL 增强版PostgreSQL 12PostgreSQL 13
address_standardizer2.5.12.5.12.5.12.5.12.5.13.0.03.1.0
address_standardizer_data_us2.5.12.5.12.5.12.5.12.5.13.0.03.1.0
amcheck1.11.11.21.2
auto_explain2222222
bloom1.01.01.01.0
btree_gin1.01.01.21.31.31.31.3
btree_gist1.11.21.51.51.51.51.5
citext1.11.31.41.51.51.61.6
cube1.01.21.21.41.41.41.4
dblink1.11.21.21.21.21.21.2
dict_int1.01.01.01.01.01.01.0
dict_xsyn1.01.01.01.01.01.01.0
earthdistance1.01.11.11.11.11.11.1
fuzzystrmatch1.01.11.11.11.11.11.1
hll2.122.122.122.122.122.142.15.1
hstore1.31.41.41.51.51.61.7
icu1.01.01.01.0
intagg1.01.11.11.11.11.11.1
intarray1.01.21.21.21.21.21.3
isn1.01.11.11.21.21.21.2
ltree1.01.11.11.11.11.11.2
mysql_fdw2.5.52.5.52.5.52.5.5
oracle_fdw2.1.02.1.02.1.02.2.02.3.0
orafce3.8.03.8.03.8.03.8.003.8.03.14.0
pageinspect1.31.51.61.71.71.71.8
passwordcheck2222222
pg_bigm1.2_202002281.2_202002281.2_202002281.2_20200228
pg_buffercache1.11.21.31.31.31.31.3
pg_cron1.2.01.3.0
pg_freespacemap1.01.11.21.21.21.21.2
pg_hint_plan1.1.51.2.01.3.01.3.51.3.51.3.71.3.7
pg_jieba1.1.01.1.01.1.01.1.01.1.01.1.02.0.1
pg_pathman1.5.81.5.81.5.81.5.81.5.81.5.121.5.12
pg_prewarm1.01.11.11.21.21.21.2
pg_repack1.4.61.4.61.4.61.4.61.4.61.4.61.4.6
pg_roaringbitmap0.5.20.5.20.5.20.5.2
pg_stat_statements1.31.41.61.61.61.71.8
pg_trgm1.11.31.31.41.41.41.5
pg_visibility1.21.21.21.2
pgcrypto1.21.31.31.31.31.31.3
pglogical2.3.32.3.32.3.32.3.3
pg_profile_pro1.0
pgrouting3.1.03.1.03.1.03.1.3
pgrowlocks1.11.21.21.21.21.21.2
pg_sql_history1.01.01.01.01.01.01.0
pgsql-ogr-fdw1.0.121.0.121.0.121.0.12
pgstattuple1.31.41.51.51.51.51.5
plpgsql1.01.01.01.01.01.01.0
plperl1.01.01.01.0
plproxy2.10.02.10.02.10.02.10.0
plv82.3.152.3.152.3.152.3.15
postgis2.5.12.5.12.5.12.5.12.5.13.0.03.1.0
postgis_raster集成到postgis集成到postgis集成到postgis集成到postgis集成到postgis3.0.03.1.0
postgis_sfcgal2.5.12.5.12.5.12.5.12.5.13.0.03.1.0
postgis_tiger_geocoder2.5.12.5.12.5.12.5.12.5.13.0.03.1.0
postgis_topology2.5.12.5.12.5.12.5.12.5.13.0.03.1.0
postgres_fdw1.01.01.01.01.01.01.0
postgres-decoderbufs1.3.11.3.11.3.11.3.1
postgresql_anonymizer0.7.10.7.10.7.10.7.1
q3c2.0.02.0.02.0.02.0.0
rum1.3.701.3.71.3.7
sslinfo1.21.21.21.2
tablefunc1.01.01.01.01.01.01.0
tds_fdw2.0.12.0.12.0.12.0.12.0.2
test_decoding2222222
timescaledb01.3.21.3.21.3.21.3.21.7.02.1.0
tsm_system_rows1.01.01.01.01.01.01.0
tsm_system_time1.01.01.01.01.01.01.0
unaccent1.01.11.11.11.11.11.1
uuid-ossp1.01.11.11.11.11.11.1
wal2json2.32.32.32.3
xml21.11.11.11.1
zhparser1.01.01.01.01.01.01.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)插件。
  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用户的密码。

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
  1. 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”。
plpgsqlplpgsql 1.0插件支持提供SQL过程语言,默认内置安装,无需手动创建该插件。
earthdistance安装earthdistance插件前,请先安装cube插件。
cube如果已安装earthdistance插件,删除cube插件会导致earthdistance插件不可用。
timescaledbRDS 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_repackpg_repack可以使用最小的锁资源来重新整理表和索引的物理页面,从而实现物理页面的碎片整理。相较于使用cluster和vacuumn full重写表,pg_repack不需要在整个处理期间持有表级排他锁,因此能提供近似的在线服务。具体操作请参考使用pg_repack插件

点击关注,第一时间了解华为云新鲜技术~