最近在龙蜥 SkillHub 上翻到一个很有意思的 skill,叫 pg-create-cluster,由唐成老师的中启乘数科技(杭州)贡献。
它的目标就一句话: 让 Claude Code 帮你对话式地把 PostgreSQL 流复制集群建起来。
传统 DBA 想建一个 1 主 2 备的 PG 集群,你得翻 30 页文档、记 若干 个参数、跑 hosts 探查、跑 vips 选空闲 VIP、跑 binpaths 看实际版本,然后小心翼翼地拼一条 create 命令。中间任意一个细节错了,initdb 报错、端口冲突、VIP 被占,前功尽弃。
pg-create-cluster 这个 skill 的核心思路,不是把这些命令打包成一个脚本,而是让 Claude Code 站在你旁边,像聊天一样一步一步问你。你回答,它就生成下一步命令;你犹豫,它就再问你一遍。
今天这篇文章,就把这件事拆开讲。
过去十年,DBA 工具一直在做"减法" —— 把 30 页文档压成 5 个参数,把 5 个参数压成 1 条命令。
pg-create-cluster 这件事,走出了另一条路:工具不再只输出命令,而是开始"问你问题" 。
它做三件事:
第一,对话式 —— 一次只问 1 个问题,已定下的绝不重问。
第二,点选式 —— 跑 hosts / vips / binpaths 把真实的主机、VIP、版本摆到你面前让你选,而不是开放填空。
第三,shell 落地 —— 最后它会生成具体脚本命令直接跑起来。
合在一起, 这个 skill 解决的是一件很经典的事情:把 DBA 建库这件事,从"翻文档拼命令"降维到"跟 AI 助手聊天" 。
用这个 skill 之前,有 三件事 必须先确认,缺一个就跑不通。
第一件:CLup 必须先起来。 本地 CLup 默认连 127.0.0.1 的 8090 端口,远程 CLup 要带 --url,而且端口后面不能加 /api。这里有个非常关键的工程哲学: 建库第一步必须先问用户本地还是远程,连接配置要先于凭据确定。你连哪台机器,直接决定后续每条命令要不要带 --url。
第二件:Python 解释器是固定的。 必须用 /opt/csu_pyenv/bin/python,这个解释器自带 pycryptodome 库,脚本做密码 AES 加密依赖它。换别的 Python 解释器,跑起来会直接报错。
第三件:PG 二进制要对得上 OS。 这是一个非常隐蔽的坑 —— 同一台机上的 PG,如果是给 EL8 编的,但你跑的是 Rocky9,initdb 时会缺 libicui18n.so.60、libssl.so.1.1 这些 .so 文件,然后直接挂掉。解法是要么换装对 OS 的 PG,要么换一台 PG 编译正常的主机。
三个原则看似简单,做到位的 skill 不到 10% 。
第一:一次只问 1 个。绝对不写成"请提供:集群名、主库 IP、备库 IP、PG 版本……"这种清单。每轮先扫历史对话,已定下的绝不重问。
这件事看似简单,但实际上 90% 的 AI 工具都会在这一步栽 —— 上来就丢表单给用户,用户根本不知道先回答哪个。
第二:用真实数据做选择。先跑 hosts / vips / binpaths --host 把真实的主机、VIP、版本摆到你面前让你点选,而不是开放填空。
理由很直接: 用户在填空的时候,90% 会填错(拼错 IP、用错版本);但在点选的时候,选错的可能性不到 5% 。这是 skill 设计上对人类认知规律的尊重。
第三:连接先于凭据。第一句必须是"这次连本地 CLup 还是远程",不能上来就要密码。理由:
--url,顺序不能乱pg-create-cluster 的参数哲学是: 用户只需决定 6 件事,其余走默认。
# | 参数 | 来源 |
|---|---|---|
1 | 集群名 | 用户取 |
2 | 主库 IP | 从 hosts 挑在线 agent 可达的 |
3 | 备库 IP | 剩余在线主机,可多台,但同一台不能既主又备 |
4 | PG 完整版本 | binpaths --host <主库IP> 看实际装的(如 16.10) |
5 | VIP + 池 ID | vips 已自动排除被占的 VIP 和主机 IP |
6 | repl 流复制密码 | 默认 repl_user=db_user / repl_pass=db_pass |
管理员账号、端口、os_user、os_uid、probe 配置这些,缺省取模板(template)。setting_list 系统自动从 get_init_db_conf 按 PG 版本取,含 listen_addresses='*' 等关键配置,不要问用户。
至少 2 台(1 主 1 备),建议 3 台(1 主 2 备) 。
3 条探查 + 1 条创建,完事。
# 1. 探查在线主机
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py \
--user <u> --pass <p> hosts
# 2. 探查空闲 VIP(末尾直接给 recommended selectable VIPs)
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py \
--user <u> --pass <p> vips
# 3. 探查 PG 实际版本
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py \
--user <u> --pass <p> binpaths --host <主库IP>
# 4. 创建 + 轮询任务
/opt/csu_pyenv/bin/python create_pg_sr_cluster.py \
--user <u> --pass <p> create \
--cluster-name <名> --primary <主IP> --standby <备IP1,IP2> \
--version <完整版本> --vip <VIP> --pool-id <池ID> \
--repl-pass <密码> --wait
成功会打印 SUCCESS: cluster created (task N)。
脚本内部实际跑的事情是: 登录 → 逐节点匹配 pg_bin_path → 取 setting_list(含 listen_addresses='*')→ preflight 校验(目录空/端口/VIP) → 组装 body(密码加密) → 提交 → 轮询任务(state=1 成功、-1 失败) 。
这一段不读,踩到再查文档就晚了。
坑 ① · 密码混淆
验证连库时报 password authentication failed for user "postgres",很多 DBA 第一反应是去翻 CREATE BODY,找到顶层打印的 db_pass 字段,然后用这个值去登录 —— 立刻报错。
原因是这个 db_pass 是 to_db_text 的 AES 加密串,不是明文。实例真实密码 = 模板默认明文 postgres 。
正确姿势:
PGPASSWORD=postgres /usr/pgsql-14/bin/psql -h <VIP 或 主库IP> -U postgres
坑 ② · database not connected
建库时报 create_replication_user ... database not connected!,99% 是 setting_list 的问题 —— 没 listen_addresses,新 PG 只听 localhost,CLup server 连不上。
这个 skill 已经自动从 get_init_db_conf 取 setting_list,正常不会再现;若改脚本时又复现,先查 setting_list 里有没有 listen_addresses='*' 。
坑 ③ · state=0 不是故障
现网 CLup 这版 clup_cluster.state=0 = 正常(库里所有健康集群都是 0);CLAUDE.md 写的 1=Normal 是逻辑 HA state,不是这个表的列。
判健康要看:
clup_db.db_state=0(Running)pg_stat_replication 在 streaming(state=streaming 且 replay_lsn=sent_lsn)v1 仅支持 | v1 不支持 |
|---|---|
已有在线主机 | 新建虚拟机再建集群(create_vm_sr_cluster 留 v2) |
显式指定主备(--primary / --standby) | 主机不够时硬装 |
至少 1 主 1 备,建议 1 主 2 备 | — |
凭据安全单独说一句:密码走 --pass 会出现在进程命令行(ps aux 就能看到),更推荐用环境变量CLUP_USER / CLUP_PASS(默认先读环境变量,没读到才用 flag)。
pg-create-cluster 这个 skill,最值得借鉴的不是它的命令、不是它的脚本,而是它对人类认知规律的尊重 ——
这三件事做到位,AI 助手才真的从"工具"升级成"伙伴"。
过去十年,运维工具一直在做减法 —— 把命令变少,把参数变少,把文档变薄;未来十年,运维工具会开始做加法 —— 让工具主动问你问题,主动把你的认知负担接过去。
pg-create-cluster 是这个转向里最容易被低估的一步。它看起来只是个 skill,但它潜台词是: DBA 工具终于开始"长嘴"了。
只要这个趋势继续下去,下一个十年,DBA 的核心能力就不再是"记住多少命令",而是"知道怎么问对问题、怎么让 AI 助手替你把命令执行好"。
参考资料
📌 如果你今天还在为建一个 PG 流复制集群头疼,建议你今天就把 Claude Code + pg-create-cluster SKILL 这套装起来。然后告诉 Claude Code:"建一个 1 主 2 备的 PG 16.10 集群",让它替你跑完整个流程。