冯在半年前(2026-01-08)写过一篇文章 《》,介绍了 PostgreSQL 18 和 Pigsty v4.0 的一个新特性,就是瞬间克隆新数据库 —— 利用文件系统 CoW 机制,PG 18 的 file_copy_method = clone 新参数,可以在秒级克隆一个非常大的数据库,而且不占用额外的存储

这玩意其实非常适合 AI Agent 使用,我在《》里提到过:极低成本的数据库克隆对于反事实推演至关重要。所以当时趁着 4.0 上线的时候,给 Pigsty 里 PG 数据库 Provisioning 的地方加上了这个功能。

打开网易新闻 查看精彩图片

今天看到阿里云数据库说,他们在阿里云 RDS for PostgreSQL 上支持这个功能了 —— 老冯看了直想笑,这个动作也太慢了。说起来其实这个功能不复杂,不需要改内核,只要在 PG 18 上启用一个参数,在创建数据库的时候加一个 STRATEGY 参数就可以实现了。其实不复杂,但是想做好,还是有几个边界条件要处理一下的。

一些改进

之前要克隆数据库的时候,在 Pigsty 的 IaC 式操作里还是有些繁琐,首先你要定义一个数据库,从另一个数据库作为模板,然后执行数据库创建。

所以这次我趁着 pig v1.5 发布的机会,把数据库克隆做成了一个简单易用的命令,pig pg clone。简单的说现在你有个数据库 meta,现在你只要执行 pig pg clone meta ,它就会自动生成一个克隆了。

打开网易新闻 查看精彩图片

当然,你可以使用参数来定制行为,比如指定分支的名字,如果不指定,就按下划线后加数字的方式依次自动起名了。

命令会自动检测是否启用并支持瞬间克隆(目前用 Pigsty + XFS 就满足前提),如果满足就执行瞬间克隆,不满足就警告等待确认并执行普通克隆。-y 可以跳过确认。

打开网易新闻 查看精彩图片

只要底层用的是支持 CoW 的文件系统(比如 xfs),那么克隆一个数据库基本是常数时间耗时,通常几百毫秒,而且占用空间不会变大,只有后续真实写脏的数据块才会真正开始占用新的空间。

Agent Native CLI

当然这个命令行工具还是优点不一样的,因为这是专门给 DBA 和 DBA Agent 设计的。之前你也可以用 Ansible Playbook,或者 pigsty 提供的 shell 脚本 /pg/bin/pg-clone 来执行克隆,不过很显然都没有直接用 pig 命令行工具来的方便。

打开网易新闻 查看精彩图片

比如,在执行操作之前,你可以使用 --plan 打印计划,它会告诉你它会做什么事情,有什么风险。你还可以用 -o json-o yaml 让它输出 JSON 和 YAML 格式的输出。

打开网易新闻 查看精彩图片

顺便一提,命令本体和 Help 输出也都可以使用 text,json,yaml 格式,因此 Agent 用起来会非常方便。因为它可以很轻松的用探索式的方式,拿到所需的结构化帮助信息。pig 里所有命令都有这个功能。

打开网易新闻 查看精彩图片

这个设计,我之前称之为 AgentNative CLI ,之前写了篇文章介绍过。

实例级 Fork

当然除了 Database Clone,还有一个新的相关功能也值得一提。我在 《》 也提到过,就是实例级瞬间克隆,我将其称作 “fork”。

打开网易新闻 查看精彩图片

这里,你只要 执行 pig pg fork dev ,就能从当前实例创建一个名为 dev 的实例,随机分配一个新的端口号。这个功能在误删处理的时候非常实用,首先你可以临时分支一个实例(不占用额外存储),然后快速的用增量 PITR 回滚验证,验证无误之后再在主实例上执行。

顺便一提,现在使用 pig 做 pitr 也非常方便。 比如下面,一条龙傻瓜式执行时间点恢复到特定时间点。

打开网易新闻 查看精彩图片

这次 pig 命令行工具发布,新增了很多管理功能,包括对 PostgreSQL,Patroni,Pgbackrest 组件的各种管理,现在都封装成上面 pg clone / pg fork 的 AgentNative CLI,同时方便人类 DBA 与 AI Agent 使用。过几天会专门写篇文章详细介绍一下。

数据库老司机

点一个关注 ⭐️,精彩不迷路

对 PostgreSQL, Pigsty,下云,AI 感兴趣的朋友

打开网易新闻 查看精彩图片