安装扩展

如何从 Pigsty 本地软件源,或直接从上游互联网软件源安装 PostgreSQL 扩展插件?

Pigsty 使用操作系统标准的包管理器(yum/apt)来安装 PostgreSQL 扩展插件。


配置扩展

在 PGSQL 集群初始化时,Pigsty 会自动安装 pg_packagespg_extensions 中指定的扩展插件。

两个参数都可以用于安装 PostgreSQL 相关软件包,通常 pg_packages 用于在全局指定整个环境中所有 PostgreSQL 集群都需要统一安装的软件包:例如 PostgreSQL 内核,高可用组建 Patroni,连接池 pgBouncer,监控 pgExporter 等。 Pigsty 默认也会在这里指定安装三个重要扩展:pgvector, pg_repackwal2json 用于膨胀治理和 CDC 变更抽取。

pg_extensions 则通常用于在特定集群中,指定本集群需要安装的扩展插件。默认为空列表,表示不安装任何额外的扩展插件。

pg_packages:                      # 有待安装的 PostgreSQL 相关软件包,可以使用别名,安装中确保存在即可。
  - postgresql
  - wal2json pg_repack pgvector
  - patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
pg_extensions: []                 # 有待安装的 PostgreSQL 扩展包,可以使用别名,会自动更新到最新可用版本

另一个重要区别是:pg_packages 安装的软件包只确保存在即可,而 pg_extensions 安装的软件包会默认 升级到最新可用版本

当使用本地软件源时,这并不是一个问题。当您直接使用互联网上游软件源时,请充分考虑这一点,并将不希望升级的扩展插件转移到 pg_packages 中。


在现有集群上安装扩展

对于一个已经完成置备初始化的 PostgreSQL 集群,如果你想安装新的扩展插件:

首先将所需的扩展添加至 pg_extensions 中,然后通过以下命令执行子任务完成安装:

./pgsql.yml -t pg_extension  # 安装 pg_extensions 中指定的扩展插件

请注意,pg_extension 任务中指定的扩展插件会默认升级到当前环境中最新可用版本。


安装扩展的前提条件

想要安装扩展插件,您需要确保以下两项中任意一项成立

  • 本地安装:您已经配置了 Pigsty 的本地软件源,并且扩展已经下载至至本地软件仓库。
  • 在线安装:您已经在待安装的节点上直接配置上游互联网软件源,并且可以访问互联网。

通常来说,对于严肃的生产环境,您应该使用 Pigsty 的本地软件源来统一管理并安装扩展: 首先下载到本地软件仓库中,再从本地软件仓库中安装扩展。这样可以确保扩展的版本全局一致,并避免让数据库节点直接访问互联网。 但某些时候(例如在开发环境中为了方便)您也可以直接使用互联网上游软件源来安装扩展。

要使用本地安装,您首先需要确保目标扩展已经被 下载 到本地软件仓库中。 如果要使用在线安装,请确保待安装的节点可以访问互联网,并且上游软件源可以正常访问。 然后使用以下命令来直接在目标集群上添加仓库并安装扩展:

./node.yml  -l <cls> -t node_repo -e node_repo_modules=local,node,pgsql    # 在目标节点上启用互联网软件仓库
./pgsql.yml -l <cls> -t pg_extension                                                        # 使用本地+互联网上游仓库安装扩展

扩展名翻译机制

在 Pigsty 中,您可以在 pg_packagespg_extensions 中使用:

  • 原始的操作系统 RPM/DEB 包名,您可以在包名中使用 * 通配符。
  • 带有 $v 占位符的包名,Pigsty 会自动使用 pg_version 的值替换占位符。
  • Pigsty 提供的 标准扩展包名 ,Pigsty 会自动根据活跃 PG 大版本与操作系统翻译为对应的 RPM/DEB 包名。

例如:

postgis35_15*             # 直接指定 RPM 包名名称
postgresql-14-postgis-3*  # 直接指定 DEB 包名称
postgresql-$v-postgis-3*  # 指定 DEB 包名称,同时使用 PG 大版本号占位符 $v 
postgis35_$v*             # 指定 RPM 包名称,同时使用 PG 大版本号占位符 $v 
postgis                   # 指定扩展包别名,自动翻译为 DEB/RPM 包名,与当前活跃 PG 大版本

我们建议使用 Pigsty 提供的标准化扩展名(Alias),在不同的操作系统发行版中, Pigsty 将标准扩展名翻译为对应 PG 大版本的 RPM / DEB 包名,这样用户可以无需关心不同操作系统发行版的扩展包名差异:

Pigsty 尽最大努力对齐 EL 操作系统与 Debian 操作系统生态的 PostgreSQL 扩展,但仍有少量扩展因为各种原因难以/尚未移植, 请参考 RPM扩展列表DEB扩展列表 了解更多信息。