|
之前我有一篇文章介绍了用pigsty部署PG数据库集群,但如何给集群安装扩展,我们先看一下社区的文档介绍如下:
如果你想在 PostgreSQL 集群上安装扩展,请将它们加入到 pg_extensions 中,并执行:
./pgsql.yml -t pg_extension # 安装扩展
一部分扩展需要在 shared_preload_libraries 中加载后才能生效。你可以将它们加入到 pg_libs 中,或者配置一个已有的集群。
最后,在集群的主库上执行 CREATE EXTENSION ; 来完成扩展的安装。
示例:在 pg-test 集群上安装 pg_cron 扩展
ansible pg-test -b -m package -a "name=pg_cron_15" # 在所有节点上安装 pg_cron 包
# 将 pg_cron 添加到 shared_preload_libraries 中
pg edit-config --force -p shared_preload_libraries='timescaledb, pg_cron, pg_stat_statements, auto_explain'
pg restart --force pg-test # 重新启动集群
psql -h pg-test -d postgres -c 'CREATE EXTENSION pg_cron;' # 在主库上安装 pg_cron
看了上面的文字介绍,我们先梳理一下安装思路。
1、切换为vagrant用户,在主节点中要先把要安装的扩展添加到pigsty.yml配置文件的pg_extensions选项中,编辑后保存一下,内容如下所示。
pg_extensions: [ postgis, timescaledb, citus, pgvector,pg_cron ]
2、切换为postgres用户,在主节点执行如下命令,将pg_cron扩展添加到shared_preload_libraries。如果有些扩展不用添加到shared_preload_libraries,这一步就用不执行了。执行命令内容如下所示:
[08-20 19:51:27] postgres@h.pigsty:~
$ pg edit-config --force -p shared_preload_libraries='timescaledb, pg_cron, pg_stat_statements, auto_explain'
---
+++
@@ -78,7 +78,7 @@
pg_wait_sampling.profile_queries: all
random_page_cost: 1.1
shared_buffers: 906MB
- shared_preload_libraries: timescaledb, pg_stat_statements, auto_explain
+ shared_preload_libraries: timescaledb, pg_cron, pg_stat_statements, auto_explain
ssl: 'on'
ssl_ca_file: /pg/cert/ca.crt
ssl_cert_file: /pg/cert/server.crt
Configuration changed
上面的shared_preload_libraries做好了,还要用如下命令重启一下pigsty集群。
pg restart --force pg-test
要注意的是上面的命令中pg-test是集群的名称,不是数据库名称,不是主机名称。
3、要在集群中所有节点都要安装ansible ,如果哪个从节点没有安装请安装一下,记得要用root用户安装。
[08-20 20:04:54] root@pg-meta-2:~
$ yum install -y ansible
上次元数据过期检查:1:24:28 前,执行于 2025年08月20日 星期三 18时40分37秒。
依赖关系解决。
=============================================================================================
软件包 架构 版本 仓库 大小
=============================================================================================
安装:
ansible noarch 1:7.7.0-1.el9 epel 34 M
安装依赖关系:
ansible-core x86_64 1:2.14.18-1.el9 appstream 2.2 M
python3-cffi x86_64 1.14.5-5.el9 baseos 241 k
python3-cryptography x86_64 36.0.1-4.el9 baseos 1.2 M
python3-packaging noarch 20.9-5.el9 appstream 69 k
python3-ply noarch 3.11-14.el9.0.1 baseos 103 k
python3-pycparser noarch 2.20-6.el9 baseos 124 k
python3-pyparsing noarch 2.4.7-9.el9 baseos 150 k
python3-pyyaml x86_64 5.4.1-6.el9 baseos 191 k
python3-resolvelib noarch 0.5.4-5.el9 appstream 29 k
sshpass x86_64 1.09-4.el9 appstream 27 k
事务概要
=============================================================================================
安装 11 软件包
总下载:39 M
安装大小:383 M
下载软件包:
(1/11): python3-pycparser-2.20-6.el9.noarch.rpm 449 kB/s | 124 kB 00:00
(2/11): python3-pyyaml-5.4.1-6.el9.x86_64.rpm 584 kB/s | 191 kB 00:00
(3/11): python3-cryptography-36.0.1-4.el9.x86_64.rpm 3.0 MB/s | 1.2 MB 00:00
(4/11): python3-pyparsing-2.4.7-9.el9.noarch.rpm 832 kB/s | 150 kB 00:00
(5/11): python3-cffi-1.14.5-5.el9.x86_64.rpm 1.8 MB/s | 241 kB 00:00
(6/11): python3-ply-3.11-14.el9.0.1.noarch.rpm 412 kB/s | 103 kB 00:00
(7/11): sshpass-1.09-4.el9.x86_64.rpm 287 kB/s | 27 kB 00:00
(8/11): python3-resolvelib-0.5.4-5.el9.noarch.rpm 292 kB/s | 29 kB 00:00
(9/11): python3-packaging-20.9-5.el9.noarch.rpm 376 kB/s | 69 kB 00:00
(10/11): ansible-core-2.14.18-1.el9.x86_64.rpm 3.0 MB/s | 2.2 MB 00:00
(11/11): ansible-7.7.0-1.el9.noarch.rpm 3.5 MB/s | 34 MB 00:09
---------------------------------------------------------------------------------------------
总计 3.7 MB/s | 39 MB 00:10
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : python3-resolvelib-0.5.4-5.el9.noarch 1/11
安装 : sshpass-1.09-4.el9.x86_64 2/11
安装 : python3-pyparsing-2.4.7-9.el9.noarch 3/11
安装 : python3-packaging-20.9-5.el9.noarch 4/11
安装 : python3-ply-3.11-14.el9.0.1.noarch 5/11
安装 : python3-pycparser-2.20-6.el9.noarch 6/11
安装 : python3-cffi-1.14.5-5.el9.x86_64 7/11
安装 : python3-cryptography-36.0.1-4.el9.x86_64 8/11
安装 : python3-pyyaml-5.4.1-6.el9.x86_64 9/11
安装 : ansible-core-1:2.14.18-1.el9.x86_64 10/11
安装 : ansible-1:7.7.0-1.el9.noarch [===================================== ] 11/11
安装 : ansible-1:7.7.0-1.el9.noarch [======================================== ] 11/11
安装 : ansible-1:7.7.0-1.el9.noarch 11/11
运行脚本: ansible-1:7.7.0-1.el9.noarch 11/11
验证 : python3-pycparser-2.20-6.el9.noarch 1/11
验证 : python3-pyyaml-5.4.1-6.el9.x86_64 2/11
验证 : python3-cryptography-36.0.1-4.el9.x86_64 3/11
验证 : python3-ply-3.11-14.el9.0.1.noarch 4/11
验证 : python3-pyparsing-2.4.7-9.el9.noarch 5/11
验证 : python3-cffi-1.14.5-5.el9.x86_64 6/11
验证 : ansible-core-1:2.14.18-1.el9.x86_64 7/11
验证 : sshpass-1.09-4.el9.x86_64 8/11
验证 : python3-resolvelib-0.5.4-5.el9.noarch 9/11
验证 : python3-packaging-20.9-5.el9.noarch 10/11
验证 : ansible-1:7.7.0-1.el9.noarch 11/11
已安装:
ansible-1:7.7.0-1.el9.noarch ansible-core-1:2.14.18-1.el9.x86_64
python3-cffi-1.14.5-5.el9.x86_64 python3-cryptography-36.0.1-4.el9.x86_64
python3-packaging-20.9-5.el9.noarch python3-ply-3.11-14.el9.0.1.noarch
python3-pycparser-2.20-6.el9.noarch python3-pyparsing-2.4.7-9.el9.noarch
python3-pyyaml-5.4.1-6.el9.x86_64 python3-resolvelib-0.5.4-5.el9.noarch
sshpass-1.09-4.el9.x86_64
完毕!
4、在所有节点上以vagrant用户用ansible安装扩展,由于我部署的PG集群使用17版本,我选择了pg_cron_17扩展,这个要根据你的具体PG版本修改一下扩展版本。当然你也可以用冯哥的pig进行安装,那也是一个专业的扩展安装工具,实在是广大PG数据库爱好者安装扩展的福音,网友们不用再去github费心寻找了,冯哥已经花了大量心血收集扩展,几乎包括你要用的所有扩展。
[08-20 20:06:08] vagrant@pg-meta-2:~
$ ansible 127.0.0.1 -b -m package -a "name=pg_cron_17"
127.0.0.1 | SUCCESS => {
"changed": false,
"msg": "Nothing to do",
"rc": 0,
"results": []
5、最后,我们在主库中执行CREATE EXTENSION pg_cron。
注:虽然社区的网站提供了扩展的安装方法,内容只有区区几行字,似乎比较简单。但实际操作了起来,为了厘清思路我昨晚花了1个多小时才搞明白。通常技术文档内容是独立分散的,想想如何把这些内容有效地串联起来解决实际问题,另外在读文档时如果遇到不懂时,多在群里问一下网友和作者。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com