Azure Database for PostgreSQL(单一服务器)中的 PostgreSQL 扩展

适用于:Azure Database for PostgreSQL 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 强烈建议升级到 Azure Database for PostgreSQL - 灵活服务器。 有关迁移到 Azure Database for PostgreSQL 灵活服务器的详细信息,请参阅 Azure Database for PostgreSQL 单一服务器的最新动态?

PostgreSQL 支持使用扩展来扩展数据的功能。 扩展在单个包中将多个相关 SQL 对象捆绑在一起,可以使用单个命令在数据库中加载或删除该包。 在数据库中加载之后,扩展会如同内置功能一样运行。

如何使用 PostgreSQL 扩展

必须先在数据库中安装 PostgreSQL 扩展,然后才能使用它们。 若要安装特定扩展,请通过 psql 工具运行 CREATE EXTENSION 命令,将打包的对象加载到数据库中。

用于 PostgreSQL 的 Azure 数据库支持下面列出的一部分键扩展。 还可以通过运行 SELECT * FROM pg_available_extensions; 获取此信息。 不支持未列出的其他扩展。 不能在 Azure Database for PostgreSQL 中创建自己的扩展。

Postgres 11 扩展

以下扩展在 Azure Database for PostgreSQL 服务器中提供,此类服务器的 Postgres 版本为 11。

扩展名 扩展版本 说明
address_standardizer 2.5.1 用于将地址分析成构成元素。
address_standardizer_data_us 2.5.1 Address Standardizer US 数据集示例
btree_gin 1.3 支持在 GIN 中索引常见数据类型
btree_gist 1.5 支持在 GiST 中索引常见数据类型
citext 1.5 不区分大小写的字符串的数据类型
cube 1.4 用于多维数据集的数据类型
dblink 1.2 从数据库中连接到其他 PostgreSQL 数据库
dict_int 1.0 用于整数的文本搜索字典模板
earthdistance 1.1 计算地球表面上的大圆距离
fuzzystrmatch 1.1 确定字符串间的相似性和差异
hstore 1.5 用于存储(键/值)对集的数据类型
hypopg 1.1.2 用于 PostgreSQL 的假设索引
intarray 1.2 针对 1-D 整数数组的函数、运算符和索引支持
isn 1.2 用于国际产品编号标准的数据类型
ltree 1.1 用于分层树形结构的数据类型
orafce 3.7 函数和运算符,用于模拟商业 RDBMS 提供的部分函数和包
pgaudit 1.3.1 提供审核功能
pgcrypto 1.3 加密函数
pgrouting 2.6.2 pgRouting 扩展
pgrowlocks 1.2 显示行级锁定信息
pgstattuple 1.5 显示元组级别统计信息
pg_buffercache 1.3 检查共享缓冲区缓存
pg_partman 4.0.0 一种扩展,用于按时间或 ID 管理已分区表
pg_prewarm 1.2 prewarm 关系数据
pg_stat_statements 1.6 跟踪已执行的所有 SQL 语句的执行统计信息
pg_trgm 1.4 基于三元匹配的文本相似度度量和索引搜索
plpgsql 1.0 PL/pgSQL 过程语言
plv8 2.3.11 PL/JavaScript (v8) 信任的过程语言
postgis 2.5.1 PostGIS 几何结构、地理以及光栅空间类型和函数
postgis_sfcgal 2.5.1 PostGIS SFCGAL 函数
postgis_tiger_geocoder 2.5.1 PostGIS tiger 地理编码器和逆向地理编码器
postgis_topology 2.5.1 PostGIS 拓扑空间类型和函数
postgres_fdw 1.0 外部数据包装器,用于远程 PostgreSQL 服务器
tablefunc 1.0 可操作整个表(包括交叉表)的函数
timescaledb 1.7.4 允许对时序数据进行可缩放的插入和复杂查询
unaccent 1.1 删除了重音的文本搜索字典
uuid ossp 1.1 生成全局唯一标识符 (UUID)

Postgres 10 扩展

以下扩展在 Azure Database for PostgreSQL 服务器中提供,此类服务器的 Postgres 版本为 10。

扩展名 扩展版本 说明
address_standardizer 2.5.1 用于将地址分析成构成元素。
address_standardizer_data_us 2.5.1 Address Standardizer US 数据集示例
btree_gin 1.3 支持在 GIN 中索引常见数据类型
btree_gist 1.5 支持在 GiST 中索引常见数据类型
chkpass 1.0 用于自动加密密码的数据类型
citext 1.4 不区分大小写的字符串的数据类型
cube 1.2 用于多维数据集的数据类型
dblink 1.2 从数据库中连接到其他 PostgreSQL 数据库
dict_int 1.0 用于整数的文本搜索字典模板
earthdistance 1.1 计算地球表面上的大圆距离
fuzzystrmatch 1.1 确定字符串间的相似性和差异
hstore 1.4 用于存储(键/值)对集的数据类型
hypopg 1.1.1 用于 PostgreSQL 的假设索引
intarray 1.2 针对 1-D 整数数组的函数、运算符和索引支持
isn 1.1 用于国际产品编号标准的数据类型
ltree 1.1 用于分层树形结构的数据类型
orafce 3.7 函数和运算符,用于模拟商业 RDBMS 提供的部分函数和包
pgaudit 1.2 提供审核功能
pgcrypto 1.3 加密函数
pgrouting 2.5.2 pgRouting 扩展
pgrowlocks 1.2 显示行级锁定信息
pgstattuple 1.5 显示元组级别统计信息
pg_buffercache 1.3 检查共享缓冲区缓存
pg_partman 2.6.3 一种扩展,用于按时间或 ID 管理已分区表
pg_prewarm 1.1 prewarm 关系数据
pg_stat_statements 1.6 跟踪已执行的所有 SQL 语句的执行统计信息
pg_trgm 1.3 基于三元匹配的文本相似度度量和索引搜索
plpgsql 1.0 PL/pgSQL 过程语言
plv8 2.1.0 PL/JavaScript (v8) 信任的过程语言
postgis 2.4.3 PostGIS 几何结构、地理以及光栅空间类型和函数
postgis_sfcgal 2.4.3 PostGIS SFCGAL 函数
postgis_tiger_geocoder 2.4.3 PostGIS tiger 地理编码器和逆向地理编码器
postgis_topology 2.4.3 PostGIS 拓扑空间类型和函数
postgres_fdw 1.0 外部数据包装器,用于远程 PostgreSQL 服务器
tablefunc 1.0 可操作整个表(包括交叉表)的函数
timescaledb 1.7.4 允许对时序数据进行可缩放的插入和复杂查询
unaccent 1.1 删除了重音的文本搜索字典
uuid ossp 1.1 生成全局唯一标识符 (UUID)

Postgres 9.6 扩展

以下扩展在 Azure Database for PostgreSQL 服务器中提供,此类服务器的 Postgres 版本为 9.6。

扩展名 扩展版本 说明
address_standardizer 2.3.2 用于将地址分析成构成元素。
address_standardizer_data_us 2.3.2 Address Standardizer US 数据集示例
btree_gin 1.0 支持在 GIN 中索引常见数据类型
btree_gist 1.2 支持在 GiST 中索引常见数据类型
chkpass 1.0 用于自动加密密码的数据类型
citext 1.3 不区分大小写的字符串的数据类型
cube 1.2 用于多维数据集的数据类型
dblink 1.2 从数据库中连接到其他 PostgreSQL 数据库
dict_int 1.0 用于整数的文本搜索字典模板
earthdistance 1.1 计算地球表面上的大圆距离
fuzzystrmatch 1.1 确定字符串间的相似性和差异
hstore 1.4 用于存储(键/值)对集的数据类型
hypopg 1.1.1 用于 PostgreSQL 的假设索引
intarray 1.2 针对 1-D 整数数组的函数、运算符和索引支持
isn 1.1 用于国际产品编号标准的数据类型
ltree 1.1 用于分层树形结构的数据类型
orafce 3.7 函数和运算符,用于模拟商业 RDBMS 提供的部分函数和包
pgaudit 1.1.2 提供审核功能
pgcrypto 1.3 加密函数
pgrouting 2.3.2 pgRouting 扩展
pgrowlocks 1.2 显示行级锁定信息
pgstattuple 1.4 显示元组级别统计信息
pg_buffercache 1.2 检查共享缓冲区缓存
pg_partman 2.6.3 一种扩展,用于按时间或 ID 管理已分区表
pg_prewarm 1.1 prewarm 关系数据
pg_stat_statements 1.4 跟踪已执行的所有 SQL 语句的执行统计信息
pg_trgm 1.3 基于三元匹配的文本相似度度量和索引搜索
plpgsql 1.0 PL/pgSQL 过程语言
plv8 2.1.0 PL/JavaScript (v8) 信任的过程语言
postgis 2.3.2 PostGIS 几何结构、地理以及光栅空间类型和函数
postgis_sfcgal 2.3.2 PostGIS SFCGAL 函数
postgis_tiger_geocoder 2.3.2 PostGIS tiger 地理编码器和逆向地理编码器
postgis_topology 2.3.2 PostGIS 拓扑空间类型和函数
postgres_fdw 1.0 外部数据包装器,用于远程 PostgreSQL 服务器
tablefunc 1.0 可操作整个表(包括交叉表)的函数
timescaledb 1.7.4 允许对时序数据进行可缩放的插入和复杂查询
unaccent 1.1 删除了重音的文本搜索字典
uuid ossp 1.1 生成全局唯一标识符 (UUID)

Postgres 9.5 扩展

注意

PostgreSQL 版本 9.5 已停用。

以下扩展在 Azure Database for PostgreSQL 服务器中提供,此类服务器的 Postgres 版本为 9.5。

扩展名 扩展版本 说明
address_standardizer 2.3.0 用于将地址分析成构成元素。
address_standardizer_data_us 2.3.0 Address Standardizer US 数据集示例
btree_gin 1.0 支持在 GIN 中索引常见数据类型
btree_gist 1.1 支持在 GiST 中索引常见数据类型
chkpass 1.0 用于自动加密密码的数据类型
citext 1.1 不区分大小写的字符串的数据类型
cube 1.0 用于多维数据集的数据类型
dblink 1.1 从数据库中连接到其他 PostgreSQL 数据库
dict_int 1.0 用于整数的文本搜索字典模板
earthdistance 1.0 计算地球表面上的大圆距离
fuzzystrmatch 1.0 确定字符串间的相似性和差异
hstore 1.3 用于存储(键/值)对集的数据类型
hypopg 1.1.1 用于 PostgreSQL 的假设索引
intarray 1.0 针对 1-D 整数数组的函数、运算符和索引支持
isn 1.0 用于国际产品编号标准的数据类型
ltree 1.0 用于分层树形结构的数据类型
orafce 3.7 函数和运算符,用于模拟商业 RDBMS 提供的部分函数和包
pgaudit 1.0.7 提供审核功能
pgcrypto 1.2 加密函数
pgrouting 2.3.0 pgRouting 扩展
pgrowlocks 1.1 显示行级锁定信息
pgstattuple 1.3 显示元组级别统计信息
pg_buffercache 1.1 检查共享缓冲区缓存
pg_partman 2.6.3 一种扩展,用于按时间或 ID 管理已分区表
pg_prewarm 1.0 prewarm 关系数据
pg_stat_statements 1.3 跟踪已执行的所有 SQL 语句的执行统计信息
pg_trgm 1.1 基于三元匹配的文本相似度度量和索引搜索
plpgsql 1.0 PL/pgSQL 过程语言
postgis 2.3.0 PostGIS 几何结构、地理以及光栅空间类型和函数
postgis_sfcgal 2.3.0 PostGIS SFCGAL 函数
postgis_tiger_geocoder 2.3.0 PostGIS tiger 地理编码器和逆向地理编码器
postgis_topology 2.3.0 PostGIS 拓扑空间类型和函数
postgres_fdw 1.0 外部数据包装器,用于远程 PostgreSQL 服务器
tablefunc 1.0 可操作整个表(包括交叉表)的函数
unaccent 1.0 删除了重音的文本搜索字典
uuid ossp 1.0 生成全局唯一标识符 (UUID)

pg_stat_statements

pg_stat_statements 扩展已预加载到每个 Azure Database for PostgreSQL 服务器上,以便为你提供跟踪 SQL 语句执行统计信息的方法。 设置 pg_stat_statements.track,它可以控制哪些语句由扩展计数,默认为 top,这意味着跟踪所有由客户端直接发布的语句。 另外两个跟踪级别为 noneall。 此设置可通过 Azure 门户Azure CLI 作为服务器参数进行配置。

查询执行信息 pg_stat_statements 提供的权限与记录每个 SQL 语句时对服务器性能的影响之间存在权衡。 如果不经常使用 pg_stat_statements 扩展,则建议将 pg_stat_statements.track 设置为 none。 请注意,某些第三方监视服务可能依赖 pg_stat_statements 来提供查询性能见解,因此,请确认这是否适合你。

dblinkpostgres_fdw 允许你从一个 PostgreSQL 服务器连接到另一个 PostgreSQL 服务器,或者连接到同一服务器中的另一个数据库。 接收服务器需要允许来自发送服务器的连接通过其防火墙。 当使用这些扩展在 Azure Database for PostgreSQL 服务器之间进行连接时,可以通过将“允许访问 Azure 服务”设置为“开启”来实现此目的。 如果希望使用扩展来环回到同一服务器,也需要进行此设置。 可以在 Postgres 服务器的 Azure 门户页面中的“连接安全性”下找到“允许访问 Azure 服务”设置。 开启“允许访问 Azure 服务”会将所有 Azure IP 置于允许列表中。

注意

目前,不支持通过外部数据包装扩展(如 postgres_fdw)从 Azure Database for PostgreSQL 进行出站连接,连接到同一 Azure 区域中的其他 Azure Database for PostgreSQL 服务器的情况除外。

uuid

如果计划使用 uuid-ossp 扩展中的 uuid_generate_v4(),请考虑将其与 pgcrypto 扩展中的 gen_random_uuid() 进行比较,以了解性能优势。

pgAudit

pgAudit 扩展提供会话和对象审核日志记录。 若要了解如何在 Azure Database for PostgreSQL 中使用此扩展,请访问“审核概念”一文

pg_prewarm

pg_prewarm 扩展可将关系数据加载到缓存中。 预热缓存意味着查询在重启后第一次运行时响应时间更短。 在 Postgres10 及更低版本中,使用 prewarm 函数手动完成预热。

在 Postgres 11 及更高版本中,可以将预热配置为自动进行。 需要在 shared_preload_libraries 参数列表中包含 pg_prewarm,然后重启服务器以应用更改。 可以通过 Azure 门户CLI、REST API 或 ARM 模板设置参数。

TimescaleDB

TimescaleDB 是一个时序数据库,已作为 PostgreSQL 的扩展打包。 TimescaleDB 提供以时间为导向的分析功能、优化,并根据时序工作负荷来缩放 Postgres。

详细了解 TimescaleDB,它是 Timescale, Inc. 的注册商标。 Azure Database for PostgreSQL 提供 TimescaleDB Apache-2 版本

安装 TimescaleDB

若要安装 TimescaleDB,需将其包括在服务器的共享预加载库中。 更改 Postgres 的 shared_preload_libraries 参数需要shared_preload_libraries才能生效。 可以使用 Azure 门户Azure CLI 更改参数。

使用 Azure 门户

  1. 选择你的 Azure Database for PostgreSQL 服务器。

  2. 在侧栏中选择“服务器参数”。

  3. 搜索 shared_preload_libraries 参数。

  4. 选择“TimescaleDB” 。

  5. 选择“保存” ,保留所做的更改。 保存更改后会获得通知。

  6. 获得通知后,请重启服务器以应用这些更改。 若要了解如何重启服务器,请参阅重启 Azure Database for PostgreSQL 服务器

现在可以在 Postgres 数据库中启用 TimescaleDB。 连接到数据库并发出以下命令:

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

提示

如果看到错误,请确认是否已在保存 shared_preload_libraries 后重启服务器

现在可以从头开始创建 TimescaleDB hypertable,也可以迁移 PostgreSQL 中的现有时序数据

使用 pg_dump 和 pg_restore 还原 Timescale 数据库

若要使用 pg_dump 和 pg_restore 还原 Timescale 数据库,需要在目标数据库中运行两个帮助程序过程:timescaledb_pre_restore()timescaledb_post restore()

首先,准备目标数据库:

--create the new database where you'll perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database 
CREATE EXTENSION timescaledb;

SELECT timescaledb_pre_restore();

现在,你可在原始数据库上运行 pg_dump,然后执行 pg_restore。 还原后,请确保在还原的数据库中运行以下命令:

SELECT timescaledb_post_restore();

若要更详细地了解启用了 Timescale 的数据库的还原方法,请参阅 Timescale 文档

使用 timescaledb-backup 还原 Timescale 数据库

运行上面列出的 SELECT timescaledb_post_restore() 过程时,可能会在更新 timescaledb.restoring 标记时出现权限被拒绝错误。 这是因为 Cloud PaaS 数据库服务中的 ALTER DATABASE 权限有限。 在这种情况下,可以改为使用 timescaledb-backup 工具来备份和还原 Timescale 数据库。 timescaledb-backup 程序使转储和还原 TimescaleDB 数据库的过程更简单、更不易出错且更高效。 为此,应执行以下操作

  1. 安装工具,详细信息见此处
  2. 创建目标 Azure Database for PostgreSQL 服务器和数据库
  3. 按如上所述启用 Timescale 扩展
  4. 向用户授予将由 ts-restore 使用的 azure_pg_admin 角色
  5. 运行 ts-restore 还原数据库

有关这些实用工具的更多详细信息,请参阅此处

注意

使用实用工具 timescale-backup 还原到 Azure 时,由于非灵活 Azure Database for PostgresQL 的数据库用户名必须使用 <user@db-name> 格式,因此需要将 @ 替换为字符编码 %40