Agent Skills
返回列表
PostgreSQL 工程实践指南

PostgreSQL 工程实践指南

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_15292d5a/yjkj-compound-eng-postgresql。

技能介绍

解决什么问题

PostgreSQL 应用中的很多问题不会在初期暴露:VARCHAR(n)、可空布尔、缺少外键索引、OFFSET 分页和 SELECT * 会在数据规模增长后变成慢查询、锁竞争和索引膨胀。生产迁移里,普通 CREATE INDEX、直接加 NOT NULL、原地 ALTER TYPE 也可能锁表或让回滚变复杂。JSONB、RLS 和并发写还容易踩到语义坑,例如删错键、把 SQL NULL 当成 JSON null、用 FOR UPDATE 误以为能阻止幻影插入。compound-eng-postgresql 把这些实践整理成可执行的工程规范。

技能如何工作

  • 类型与 Schema:优先 BIGINT GENERATED ALWAYS AS IDENTITY、TIMESTAMPTZ、TEXT、NUMERIC(p,s)、BOOLEAN NOT NULL DEFAULT、JSONB,并要求外键索引、CHECK 约束、created_at 与 updated_at。
  • 迁移安全:迁移不可变、生产前滚优先;重命名或删列使用 expand-contract;加索引使用 CREATE INDEX CONCURRENTLY;大批量回填写分片,并可用 FOR UPDATE SKIP LOCKED 控制锁范围。
  • 索引与 JSONB:按访问模式选择 B-tree、GIN、GiST、BRIN;JSONB 删除键优先用 #-,避免 col - 'a,b'、链式 - 'a' - 'b',以及把 jsonb_set 中的 SQL NULL 误当成删键。
  • 并发与查询:SELECT ... FOR UPDATE 不阻止幻影插入,get-or-create 更适合唯一索引 + ON CONFLICT 或 advisory lock;分页优先游标;优化先从 EXPLAIN (ANALYZE, BUFFERS) 开始。

适用边界

它更适合代码评审、迁移设计、性能排查和数据库规范落地。部分规则依赖 PostgreSQL 版本,例如 NULLS NOT DISTINCT;复杂全文检索、并发脚本和运维策略仍需结合具体业务与版本验证。

使用场景

  • 设计或评审 PostgreSQL 表结构时,对照类型默认、外键索引和 CHECK 约束输出修改建议。
  • 准备生产迁移方案时,用 expand-contract、CONCURRENTLY 和批量回填写判断是否锁表。
  • 排查慢查询和索引未命中时,按 EXPLAIN BUFFERS、pg_stat_user_indexes 与索引策略定位。
  • 处理 JSONB 字段删除、更新和并发写时,避免键丢失、SQL NULL 与 read-modify-write 覆盖。

适合人员

  • 负责核心业务数据库的设计工程师,希望把 PostgreSQL 建表、索引和约束规范统一落地。
  • 维护生产迁移脚本的后端工程师,需要在上线前判断 DDL 锁表、回滚和零停机风险。
  • 排查慢查询的 SRE 或数据库工程师,想从执行计划、统计信息和索引策略定位瓶颈。
  • 处理复杂 JSONB 与并发写的后端工程师,需要避免键删除、NULL 语义和写覆盖陷阱。