跳转到主要内容

让 Patronictl 自己说话

为什么 pig pt 不再镜像 Patronictl 命令树,而是只保留少量 PIG 本地辅助功能的透明启动器。

决策日期: 2026-07-21
状态: 已实现并随 pig v1.6.0 发布。
当前参考: pig pt
范围: Patronictl 集群命令,以及 PIG 拥有的配置选择、参数设置、服务、状态和日志辅助功能。

决策

pig pt 是已安装 patronictl 的透明启动器。PIG 选择配置并分派少量本地辅助命令; 其它命令 token 及其后的所有参数原样传递,保留原生提示、终端行为、输出格式与退出码。

PIG 不再维护一份持续变化的 Patronictl 命令树副本。

背景

镜像 Patronictl 要求 PIG 复制命令、参数、位置语法、确认方式、格式和版本相关行为。 上游接口持续演进,PIG 的副本必然漂移。同一个操作通过 patronictl 与 PIG 调用时可能出现不同语义。

包装器在 Pigsty 环境中仍有价值:以数据库操作系统用户选择正确配置,提供本地服务和日志工作流, 并把一小段参数设置便利语法翻译为一次原生 edit-config 调用。

考虑过的方案

  • 继续镜像全部上游命令。 必然滞后,并重复 Patronictl 已经拥有的校验。
  • 只允许经过测试的命令白名单。 新上游命令仍要等待 PIG 发布后才能使用。
  • 把原生输出捕获成 PIG JSON。 会破坏交互编辑、流式输出、提示、终端保真和上游 schema。
  • 完全删除 pig pt 确定性配置选择与本地 Pigsty 辅助能力仍然有价值。

契约

  • 第一个非选项命令 token 决定本地分派还是透传;
  • set、本地 service shortcut、statuslog 由 PIG 拥有;
  • 其它命令和剩余 token 原样转发;
  • pig pt -- COMMAND ... 显式绕过本地名称冲突;
  • 包装器参数必须出现在原生命令 token 之前;
  • 原生 help 可以在没有本地 Patroni 配置时运行;
  • Patronictl 拥有交互提示、原生 --format 和退出码;
  • 会产生原生参数歧义的 PIG 全局结构化输出被明确拒绝;
  • 配置按确定顺序解析,进程以数据库系统用户运行。

影响

自动化需要采用 Patronictl 的 cluster-first 位置语法与原生输出参数。 部分 PIG 专有别名和结果 schema 被移除。换来的好处是:新 Patronictl 功能无需等待 PIG 发布, 行为也不再依赖滞后的包装器实现。

本地 set 辅助功能有意保持很小:它只分类 Patroni 标量键与 PostgreSQL 参数,然后执行一次原生 edit-config。

验证与演进

重写提交为 6cbc23b。 测试覆盖 token 边界、argv 原样保留、配置优先级、数据库用户执行、原生退出码、无配置 help、 输出模式拒绝、-- 逃逸与本地辅助命令冲突。最终 help 路径修正在 v1.6.0 前完成。

当前状态

透传命令语法以 Patronictl 自身文档为准;PIG 的配置选择与本地辅助功能以 pig pt 为准。 不能用 PIG -o json 代替 Patronictl 原生 --format json