# 第 28 章实验合同

本实验只面向已确认的 Pigsty `pg-test` 开发沙箱。它创建带随机标记的一次性数据库和角色，不读取业务表，不接入生产流量，也不修改 PostgreSQL、Patroni、Pigsty 或操作系统的持久配置。正式环境仍受 `production_ch28_gate=pending` 约束。

## 要回答的问题

1. 旧快照存在时，普通 `VACUUM` 为什么不能移除全部旧版本？
2. 释放精确保留者后，普通 `VACUUM (FREEZE, ANALYZE)` 能留下哪些可核验变化？
3. 统计估计、物理抽查、可见性图与关系大小分别能证明什么，不能证明什么？
4. `amcheck`、`REINDEX CONCURRENTLY` 与分区退役怎样进入同一份维护证据链？

## 安全边界

- 只允许创建 `pg36_maintenance` 与 `dbuser_pg36maint`，且二者注释必须含本次随机 `run_id`。
- 为避免后台监控抢先连接，数据库创建时先设为不可连接，撤销 `PUBLIC CONNECT`，只授权夹具角色后再开放。
- 只在夹具表上关闭 autovacuum；这是为了隔离实验变量，不是生产建议。
- 只终止一个同时匹配数据库、用户、应用名、PID 和非空 `backend_xmin` 的实验会话。
- 禁止 `VACUUM FULL`、`ALTER SYSTEM`、全局关闭 autovacuum、强制删库和批量终止会话。
- 过期分区只有在导出文件、SQL 清单与回灌清单三者一致后才可删除。
- 清理只允许普通 `DROP DATABASE` 与 `DROP ROLE`；任何非夹具会话都会让流程失败关闭。

## 证据与结论边界

私有证据保留 SQL 输出、进度采样、归档 CSV、源文件散列和清理细节。公开文件只保留环境、数量、前后对比、检查结果和安全结论，不包含口令、连接串、主机密钥或原始数据。一次沙箱成功只能证明流程可执行，不能替代生产窗口的锁评估、空间预算、备份验证与审批。
