PostgreSQL Strict Standard 是一套面向生产环境 PostgreSQL 的严格规范集合,目标版本为 PostgreSQL 16 及以上,并附有 17/18 新特性的说明。以下按用途、主要能力、使用方式、适用场景与限制分段介绍。
一、用途 用于在设计 schema、编写查询、审查迁移、配置连接与安全、建立可观测性时提供统一的严格标准,避免迁移导致生产事故、索引缺失或滥用、锁等待、权限越界与数据隔离失效等问题。
二、主要能力
- 版本目标:PostgreSQL 18 已 GA(2025 年 9 月发布),新部署应面向 18。值得围绕设计的要点包括:异步 I/O 子系统(AIO)让顺序扫描、位图堆扫描与 VACUUM 并发读取,批量读负载最高约快 3 倍,无需改代码;B-tree 跳过扫描让多列索引在前导列不在谓词中时也可用;并行 GIN 索引构建;原生 uuidv7();虚拟生成列成为默认(存储列需显式 STORED);RETURNING 中的 OLD 与 NEW;libpq 的 OAuth 2.0 认证;升级后规划器统计信息保留;
- 迁移安全(CRITICAL):PG-01 热表用 CREATE INDEX CONCURRENTLY,且不能在事务块内运行,失败的并发建索引会留下 INVALID 索引需删除重试;PG-02 分两步添加 NOT NULL 列,PG 11+ 支持快速非易失默认值,但 SET NOT NULL 仍会扫描表;PG-03 先以 NOT VALID 添加 CHECK/外键约束再 VALIDATE,VALIDATE 不取 ACCESS EXCLUSIVE 锁;PG-04 在迁移中设置 lock_timeout 与 statement_timeout,快速失败优于永久等待;
- 索引(CRITICAL):PG-05 为热查询的 WHERE、JOIN、ORDER BY 列建索引,用 EXPLAIN (ANALYZE, BUFFERS) 验证计划;PG-06 复合索引列序为等值列在前、范围列在后;PG-07 对倾斜谓词使用部分索引;PG-08 JSONB/数组/全文用 GIN,仅需包含查询时 jsonb_path_ops 更小更快;PG-09 新的 pgvector 索引用 HNSW(非 IVFFlat),通过 hnsw.ef_search 调节召回与速度;
- 查询模式(HIGH):PG-10 应用查询不要 SELECT *;PG-11 始终使用参数化查询($1、$2 占位符);PG-12 所有无界查询加 LIMIT,大规模分页用键集分页而非 OFFSET;PG-13 用 MERGE 做上插(PG 15+,17+ 支持 RETURNING),简单上插仍可用 INSERT ... ON CONFLICT DO UPDATE;PG-14 声明查询快之前先做 EXPLAIN (ANALYZE, BUFFERS),BUFFERS 显示缓存与磁盘读取量;
- 事务(HIGH):PG-15 默认隔离级别为 READ COMMITTED,按需提升至 REPEATABLE READ 或 SERIALIZABLE,SERIALIZABLE 可能因 40001 失败需应用重试;PG-16 用 FOR UPDATE 锁定将要更新的行;PG-17 保持事务简短,避免事务内做 HTTP 调用或等待用户;
- 连接管理(HIGH):PG-18 多数应用使用 PgBouncer 事务池模式,会话池用于需要会话状态特性的场景,语句池少见且会破坏事务,事务池禁止 LISTEN/NOTIFY、会话级咨询锁及部分 SET,应改用事务内 SET LOCAL;PG-19 按角色设置 statement_timeout、lock_timeout、idle_in_transaction_session_timeout;
- 安全(HIGH):PG-20 密码认证用 scram-sha-256,绝不用 md5;PG-21 非回环连接强制 TLS,ssl_min_protocol_version 为 TLSv1.2;PG-22 最小权限角色,应用不使用超级用户,读写角色无 DROP/ALTER/CREATE 权限,迁移角色单独且权限更高;PG-23 多租户表启用行级安全,按请求 SET LOCAL app.tenant_id;
- 可观测性(MEDIUM):PG-24 始终启用 pg_stat_statements,先读它再做优化;PG-25 跟踪复制延迟、连接数、缓存命中率、膨胀、长事务等基线指标并给出告警阈值;
- Schema 设计(MEDIUM):PG-26 新主键用 UUIDv7(PG 18 原生,低版本用扩展或应用侧生成),时间有序、对 B-tree 友好;PG-27 使用 timestamptz,绝不用 timestamp;PG-28 对大型追加表按范围分区,可按月解挂分区;
- 迁移工具基线:无论使用 sqlx、Atlas、Flyway 还是 Prisma Migrate,都要求每个文件一个前向迁移、无确认不删除、文件名可排序、合并后不再编辑、使用专用迁移角色、每个 PR 在全新数据库上跑迁移;并提供漏洞检查清单(TLS、scram-sha-256、非超级用户应用角色、pg_stat_statements、按角色超时、长事务监控、PITR 或每日全备加 WAL 归档、至少每季度测试恢复、并发建索引迁移、多租户行级安全、连接池前置)。
三、使用方式 资料未提供具体安装命令或调用步骤,暂未提供。从名称与来源看,它作为 Claude Skills 形式的技能内容,通常由兼容的 AI 工具在相关任务中加载使用。
四、适用场景 适用于生产 PostgreSQL 的 schema 设计、查询编写、迁移审查、连接池与权限配置、指标监控等场景,对多租户、SERIALIZABLE 事务、pgvector 向量检索、JSONB、分区大表等方向有明确规则。
五、限制 目标版本为 PostgreSQL 16 及以上,部分特性依赖 17 或 18(如 MERGE 的 RETURNING、原生 uuidv7);事务池模式禁止会话级特性;SERIALIZABLE 需应用重试;并发建索引不能在事务内执行且失败会留下 INVALID 索引。