跳过正文
  1. PIGSTY/

Pigsty v4.1:天下武功,唯快不破

·5036 字·11 分钟· ·
冯若航
作者
冯若航
Pigsty 创始人, @Vonng
目录
Pigsty - 这篇文章属于一个选集。
§ : 本文

GitHub Release | 发布注记

先说结论:天下武功,唯快不破。2026年2月12日,PostgreSQL 社区例行发布了 18.2 / 17.8 / 16.12 / 15.16 / 14.21 五个小版本。 同一天,据我所见全球范围内给出生产级支持的只有三家:AWS RDSEDBPigsty

pg182.webp

一个开源独立项目,在交付速度上站到了和全球最大云厂商以及 PG 老大哥站在同档速度线上。这件事本身就是我想用 v4.1 讲的故事。


为什么"快"是最重要的能力
#

做数据库发行版这几年,我越来越清楚一个道理:用户不缺功能,缺的是信任

信任从哪来?不是 PPT 上写了多少特性,而是在关键时刻你能不能兑现。PostgreSQL 每次小版本更新, 往往带着 bugfix、稳定性修正、安全修补 —— 这些不是锦上添花,而是亡羊补牢。你跟进慢一天,用户就多暴露一天。

很多发行版的节奏是这样的:上游发布后做做内部测试,打包构建,最后两个月过去,发个博客说 “我们现在支持 PG 新版本了”。 等到那个时候,真正着急的用户早就自己手动升级了 —— “支持” 变成了事后追认,而不是事前保障。

PG 版本社区发布日期AWS RDSCloud SQL阿里云 RDS腾讯云华为云 RDS
PG 122019-10-03180天90天88天365天150天
PG 132020-09-24153天165天97天270天210天
PG 142021-09-30119天76天91天270天300天
PG 152022-10-13138天230天64天180天335天
PG 162023-09-1467天90天84天55天210天
PG 172024-09-2649天28天21天63天160天
PG 182025-09-2550天56天78天1天尚未支持

我想做的恰恰相反:让"跟进"这件事,快到用户根本不需要自己操心。你看到 PostgreSQL 发了新版本,打开 Pigsty,发现已经准备好了 —— 这才是一个发行版应该给用户的体感。

所以 v4.1 的主线不是堆新特性,而是把"快速跟进 + 稳定交付"变成一种可持续的常规能力。这个能力才是护城河,因为它考验的不是某一次的冲刺,而是日复一日的工程纪律。


不止 PostgreSQL:OS 小版本也一起走
#

做 “快” 容易,又好又快可不容易,这次不仅是 PostgreSQL 的小版本升级,还同步推进了几个 Linux 操作系统发行版的小版本升级:

  • EL9.6/10.0 → 9.7/10.1
  • Debian12.12/13.1 → 12.13/13.3

十四个主流 Linux 发行版的最新小版本,都制作好了对应的离线软件包。

这里有个必须再次讲清楚的事情:

EL 9.7 / 10.1 的离线包与 EL 9.6 / 10.0 不通用。

我知道很多用户的部署环境是内网甚至完全离线的。遇到这种包版本不匹配的情况,走在线安装就可以了。


Pig Agent-Native CLI:让工具学会"自我介绍"
#

举个例子:你让 Claude Code 帮你在三台机器上装 PostgreSQL 18 与一堆扩展, 它调用 pig 的时候不需要你手写任何 prompt 来解释 pig 怎么用 —— 因为 pig 会自己告诉它。这就是 Agent-Native 的意思。

传统 CLI 工具的设计假设是 “有个人在看屏幕”,所以它输出彩色文字、画表格、显示进度条 —— 这些对人很友好,但对 Agent 来说全是噪音。Agent 需要的是三件事:

我 Agent-Native 这个概念,很多人觉得这只是个 buzzword。但 pig 1.1.0 里我做的事情非常具体 —— 核心就一个词:内自省

什么意思?传统 CLI 工具的设计假设是"有个人在看屏幕"。所以它输出彩色文字、画表格、显示进度条 —— 这些对人很友好,但对 Agent 来说全是噪音。Agent 需要的是:

  • 能干什么 —— 工具主动暴露自己的能力列表,而不是让 Agent 去猜或者去读文档。
  • 干了什么 —— 执行结果是结构化的 JSON/YAML,而不是一坨需要正则解析的文本。
  • 暴露上下文 —— 环境信息可以被程序化地获取和传递。

这三件事听起来简单,但要做好需要重新审视 CLI 的每一个子命令。pig 1.1.0 把 JSON/YAML 从"附属输出格式"提升为 “一等公民”,让每个操作都能被机器可靠地调用和解析。

坦白说,这个需求我只是提出了理念并参与了设计讨论,剩下的实现工作都是由 Codex 和 Claude Code 完成的,我负责最后验收。所以这也算是 Pigsty 里第一个真正意义上的 AI 原生项目。


AI Coding:不是写代码,是扫盲区
#

v4.1 开发周期里,我在 pig CLI 和 pg_exporter 上投入了大量精力。同时密集使用了 AI coding 工具做复查 —— 主要是 Claude Code 和 Codex 5.3 Extra High。

但我想说的不是"AI 多厉害",而是 AI 在工程实践中真正好用的那个点在哪里。

答案是扫盲区

一个成熟项目里,最危险的 bug 往往不是逻辑错误 —— 那种你写完就知道不对。最危险的是那些"看起来没问题、跑起来没问题、但在特定边界条件下会出问题"的细节。 比如一个指标的单位在 PG17 和 PG18 里不一样,比如一个 io_method 参数的版本条件写成了 >= 17 但实际上应该是 >= 18

这类问题,人工 review 非常容易漏 —— 因为你的眼睛会自动跳过"看起来对"的代码。 但 AI 不会。它会老老实实地把每一行都过一遍,尤其在你明确告诉它"帮我检查版本守卫条件"的时候。

这轮扫下来,我额外修掉了大约十几到二十个小问题。单独看每个都不大,但累积起来就是用户体验的差距。

这里要特别感谢社区贡献者 @l2dy,他提了很多高质量 issue, 帮我把 Grafana 仪表盘还有配置细节里一批细节问题集中收敛掉了。 开源项目能不能越做越扎实,靠的就是这种愿意认真抠细节的人。


防火墙默认策略:宁可多敲一条命令
#

最后讲一个看起来很小、但我认为很重要的改动。 在 v4.0 里,我把防火墙默认模式设成了 none —— 意思是 “完全不碰你的防火墙配置”。 初衷是好的:尊重用户现有环境,不做多余的事。但实际反馈告诉我,这个决定有问题。

问题出在哪?EL9 系列默认是开着 firewalld 的,但很多用户对自己的防火墙状态并不清楚。 当 Pigsty 选择"不碰"的时候,用户以为一切正常,结果发现内网流量不通,排查半天才发现是防火墙规则没配对。这比 Pigsty 主动配置防火墙带来的 “干预感” 要糟糕得多。

所以 v4.1 我把默认模式改回了 zone,规则非常简单:

  • 内网网段默认信任
  • 公网默认只开放三个端口:22(SSH)、80(HTTP)、443(HTTPS)
  • 数据库端口 5432 不再默认暴露在公网

如果你需要对外开放数据库端口,需要自己显式添加。我知道这会让某些场景多敲一条命令,但我的判断是:对于安全相关的默认值,保守永远好过激进。 把“开放”变成一个有意识的动作,而不是一个容易遗忘的默认值。


七个新扩展,总数来到 451
#

每个版本照例更新扩展生态,这次新增 7 个,总数到 451。几个值得关注的:

  • pg_track_optimizer 0.9.1:自动追踪和推荐索引优化,这个方向一直有人问。
  • nominatim_fdw 1.1.0:OpenStreetMap 地理编码的外部数据包装器,GIS 用户会喜欢。
  • pg_utl_smtp 1.0.0:从数据库里直接发邮件,Oracle 迁移用户的老朋友了。
  • pg_strict 1.0.2:严格模式扩展,避免不带条件的 UPDATE/DELETE

同时 TimescaleDB 升到 2.25.0,citus 14.0.0 正式发布,还有一个非常强大的数据匿名化扩展 Postgres Anonymizer 发布了 3.0 —— 都是每个领域的重要更新。


其他值得一提的改动
#

简单列几个我觉得有价值但不值得单独成章的改动:

autovacuum 阈值调优:把 oltp/crit/tiny 模板的 autovacuum_vacuum_threshold 从 50 提到 500,analyze_threshold 从 50 提到 250。原因是小表在默认阈值下会被高频 vacuum/analyze,造成不必要的 IO 开销。这个改动对有大量小表的场景(比如多租户系统)会有明显改善。

文件描述符上限统一:修复了 fs.nr_openLimitNOFILE 的层级关系,统一设为 8M。之前有用户在高并发场景下遇到 FD 耗尽,排查发现是内核参数和 systemd 配置不一致导致的。

checkpoint_completion_target:从 0.90 提到 0.95。这个参数控制 checkpoint 写入的平滑程度,0.95 能更好地分散 IO 压力,减少 checkpoint 期间的性能抖动。

Vibe 调整:Jupyter 默认关闭(大多数人不用),Claude Code 改为通过 npm 包统一管理(之前的安装方式不够干净)。

infra-rm 重构:卸载逻辑新增 deregister 分段清理,不再是一把梭全删。你可以更精细地控制卸载的范围和顺序。

新增 Mattermost 应用模板:一键部署 Mattermost,包含数据库、文件存储、反向代理的完整配置。适合需要自建团队通讯工具的场景。如果你觉得 QQ/微信接入 ClawdBot 太麻烦,为什么不自己搭建一个 IM 呢?


写在最后
#

v4.1 不是一个大版本。没有架构重写,没有新模块登场。但它证明了一件事:上游发布当天即可交付生产级支持,这个速度不是偶然的冲刺,而是一种可以持续兑现的工程能力。 开头说用户缺的是信任。信任不是一次建立的,而是每一次小版本发布时你都在那里,每一次安全修补你都没有缺席。v4.1 想做的,就是把这件事再证明一次。 以上是 v4.1 的核心思路和重点改动。下面附完整的版本提交注记和技术细节,方便按需查阅。


v4.1.0 提交注记
#

Pigsty v4.1.0 版本发布,主旨是“天下武功,唯快不破”。

curl https://pigsty.cc/get | bash -s v4.1.0

72 个提交,252 文件变更,+5,744 / -5,015 行(v4.0.0..v4.1.0,2026-02-02 ~ 2026-02-13)

亮点特性
#

  • 新增 7 个扩展,总计 451 个扩展支持。
  • pig 升级为 Agent-Native CLI1.0.0 -> 1.1.0),支持主动暴露上下文并输出 JSON/YAML。
  • pig 新增 PostgreSQL / OS 大小版本更新统一能力。
  • pg_exporter 升级到 v1.2.01.1.2 -> 1.2.0),修复 PG17/18 指标链路与单位问题。
  • 防火墙默认安全策略收紧:node_firewall_mode=zonenode_firewall_public_port 收敛为 [22,80,443]
  • PostgreSQL 小版本更新:18.2、17.8、16.12、15.16、14.21。
  • EL 默认小版本更新到 9.7 / 10.1,Debian 默认小版本更新到 12.13 / 13.3
  • 新增 Mattermost 一键应用模板,支持数据库、目录、门户与可选 PGFS/JuiceFS。
  • 重构 infra-rm 卸载逻辑,新增 deregister 分段清理能力。
  • 优化 autovacuum 默认阈值,减少小表高频 vacuum/analyze。
  • 修复 FD 上限链路,统一 fs.nr_openLimitNOFILE=8M
  • Vibe 默认体验调整:Jupyter 默认关闭,Claude Code 改为 npm 包统一管理。

版本更新
#

  • Pigsty:v4.0.0 -> v4.1.0
  • pig CLI:1.0.0 -> 1.1.0
  • pg_exporter1.1.2 -> 1.2.0
  • 默认 EL 小版本:9.6/10.0 -> 9.7/10.1
  • 默认 Debian 小版本:12.12/13.1 -> 12.13/13.3

扩展更新
#

  • RPM Changelog 2026-02-12
  • DEB Changelog 2026-02-12
  • timescaledb 2.24.0 -> 2.25.0
  • pg_search 0.21.4 -> 0.21.7
  • pgmq 1.9.0 -> 1.10.0
  • pg_textsearch 0.4.0 -> 0.5.0
  • pljs 1.0.4 -> 1.0.5
  • pg_track_optimizer 0.9.1(新增)
  • nominatim_fdw 1.1.0(新增)
  • pg_utl_smtp 1.0.0(新增)
  • pg_strict 1.0.2(新增)
  • pgmb 1.0.0(新增)
  • pg_pwhash(新增支持)
  • informix_fdw(新增支持)

API 变化
#

  • io_method / io_workers 模板条件从 pg_version >= 17 更正为 pg_version >= 18
  • idle_replication_slot_timeout / initdb --no-data-checksums 的 PG18 守卫条件修正。
  • maintenance_io_concurrency 生效范围放宽至 PG13+
  • autovacuum_vacuum_thresholdoltp/crit/tiny 从 50 提升到 500,olap 提升到 1000。
  • autovacuum_analyze_thresholdoltp/crit/tiny 从 50 提升到 250,olap 提升到 500。
  • checkpoint_completion_target 默认从 0.90 提升到 0.95
  • 默认加入 fs.nr_open: 8388608,并统一 fs.file-max / fs.nr_open / LimitNOFILE 层级关系。
  • node_firewall_mode 默认从 none 调整为 zone
  • node_firewall_public_port 默认从 [22,80,443,5432] 调整为 [22,80,443]
  • bin/validate 新增 pg_databases[*].parameterspg_hba_rules[*].order 校验支持。
  • infra-rm.yml 新增 deregisterconfigenv 等分段标签。
  • Vibe 默认 jupyter_enabled=false,并默认安装 @anthropic-ai/claude-codehappy-coder
  • PgBouncer 参数别名收敛:pool_size_reserve -> pool_reservepool_max_db_conn -> pool_connlimit

兼容性修复(归并)
#

  • Redis replicaof 判空逻辑与 systemd 停止行为修复。
  • pg_migration 的全限定、标识符 quoting 与日志格式安全修复。
  • pgsql role handler 重启对象与变量使用错误修复。
  • blackbox 配置文件名清理项与 pgAdmin pgpass 文件格式修复。
  • pg_exporter 启动改为非阻断,避免拖慢主流程。
  • VIP 地址解析逻辑简化,未显式 CIDR 时默认掩码 24
  • MinIO 健康检查重试从 3 提升到 5
  • 节点主机名设置改用 hostname 模块。
  • app/electricapp/pg_exporter.env 修复为标准 KEY=VALUE
  • 修复 pigsty.ymlpg_crontab 语法错误。
  • ETCD 文档更新,明确默认 TLS 与可选 mTLS 的语义差异。
  • 修复 repo-add 参数传递、Debian 中国镜像兼容性与 bin/psql.py Python3 兼容性。
  • redis exporter 凭据文件权限加固。
  • pgsql-user.yml 对敏感步骤启用 no_log
  • pg_monitor 注册 Victoria target 的 gate 条件修复。
  • pg_remove 备份清理改为集群级目录,避免误删其他集群备份。

关键提交(节选)
#

7410de401 v4.1.0 release
fa31213ce conf(node): default firewall to zone with single-node 5432 override
bb8382c58 update default extension list to 451
770d01959 hide user credential in pgsql-user playbook
7219a896c pg_monitor: fix victoria registration gate conditions
7005617f1 pgsql: drop legacy pgbouncer pool parameter aliases
74c59aabe grafana: fix dashboard links, descriptions, and overrides
36c95c749 fix(cli): restore repo-add execution and HBA validation failure propagation
6f2576fd0 fix(node): set default fs.nr_open via node_sysctl_params
26e108788 fix(monitor): correct unit for time metrics scaled by pg_exporter
d439464b2 pgsql: fix pg_version guards for PG18-only settings
cb52375ac bump checkpoint_completion_target from 0.90 to 0.95
c402f0e6d fix: correct io_method/io_workers version guard from PG17 to PG18
3bf676546 vibe: disable jupyter by default and install claude-code via npm_packages
613c4efa9 fix: set fs.nr_open in tuned profiles and reduce LimitNOFILE to 8M
4cc68ed61 refine infra removal playbook
318d85e6e simplify VIP parsing and make pg_exporter non-blocking
4bff01100 fix redis replicaof guard and systemd stop
38445b68d minio: increase health check retries
a237e6c99 tune autovacuum threshold to reduce small table vacuum frequency

完整 72 条提交请参考 GitHub Release 页面。

致谢
#

  • 感谢 @l2dy 为本项目提出诸多改进意见与 Issue。

校验和
#

8bc75e8df0e3830931f2ddab71b89630  pigsty-v4.1.0.tgz
da10de99d819421630f430d01bc9de62  pigsty-pkg-v4.1.0.d12.aarch64.tgz
e1f2ed2da0d6b8c360f9fa2faaa7e175  pigsty-pkg-v4.1.0.d12.x86_64.tgz
382bb38a81c138b1b3e7c194211c2138  pigsty-pkg-v4.1.0.d13.aarch64.tgz
13ceaa728901cc4202687f03d25f1479  pigsty-pkg-v4.1.0.d13.x86_64.tgz
92d061de4d495d05d42f91e4283e7502  pigsty-pkg-v4.1.0.el10.aarch64.tgz
be629ea91adf86bbd7e1c59b659d0069  pigsty-pkg-v4.1.0.el10.x86_64.tgz
c14be706119ba33dd06c71dda6c02298  pigsty-pkg-v4.1.0.el8.aarch64.tgz
0c8b6952ffc00e3b169896129ea39184  pigsty-pkg-v4.1.0.el8.x86_64.tgz
cfcc63b9ecc525165674f58f9365aa19  pigsty-pkg-v4.1.0.el9.aarch64.tgz
34f733080bfa9c8515d1573c35f3e870  pigsty-pkg-v4.1.0.el9.x86_64.tgz
ad52ce9bf25e4d834e55873b3f9ada51  pigsty-pkg-v4.1.0.u22.aarch64.tgz
300b2185c61a03ea7733248e526f3342  pigsty-pkg-v4.1.0.u22.x86_64.tgz
2e561e6ae9abb14796872059d2f694a8  pigsty-pkg-v4.1.0.u24.aarch64.tgz
c462bb4cb2359e771ffcad006888fbd4  pigsty-pkg-v4.1.0.u24.x86_64.tgz
Pigsty - 这篇文章属于一个选集。
§ : 本文

相关文章

Pigsty v4.0 发布:进入 AI 时代

·12456 字·25 分钟
一个里程碑版本,也是我心目中的"完工软件"。它的真正主题是 “为Agent而生” —— 敢让 AI 放手干活,也敢在它干错时一键回滚到昨天。