用途:为 PostgreSQL 提供数据库设计与运维参考,适用于模式设计、查询优化、索引、管理,以及处理 JSONB、分区、RLS、CTE、窗口函数等场景。
主要能力:
- 数据类型建议:主键用 BIGINT GENERATED ALWAYS AS IDENTITY(避免 SERIAL),时间用 TIMESTAMPTZ,文本用 TEXT,金额用 NUMERIC,JSON 用 JSONB,UUID 用 gen_random_uuid(),网络地址用 INET/CIDR。
- 模式规则:每个外键列建索引(PG 不自动创建)、默认 NOT NULL、用 CHECK 约束表达域规则、created_at 默认 now()、updated_at 用触发器独立维护、唯一索引用 NULLS NOT DISTINCT(PG15+)。
- 索引策略:B-tree、GIN、GiST、BRIN 适用场景;复合、部分、覆盖、表达式索引;写多表 fillfactor=70-90;删除未使用索引。
- JSONB:GIN 索引与 @> 包含查询、表达式索引、jsonb_path_ops;删除操作用 -、#-,避免 jsonb_set 置 null 与误用 '-' 带来的数据丢失。
- RLS:ENABLE/FORCE ROW LEVEL SECURITY,策略中用会话变量,把函数调用包进标量子查询避免逐行求值,并为策略列建索引。
- 查询优化:先 EXPLAIN (ANALYZE, BUFFERS);用 pg_stat_statements 检测慢查询;CTE 默认内联;相关子查询优先 EXISTS;游标分页替代 OFFSET;大表用 reltuples 近似计数。
- 事务与锁:保持事务短小、咨询锁、FOR UPDATE 无法防幻插(改用 ON CONFLICT 或 pg_advisory_xact_lock)、23505 需 SAVEPOINT、嵌套 BEGIN 实为 SAVEPOINT。
- 迁移安全:迁移不可变、仅前进、schema 与数据迁移分离;在线建索引用 CREATE INDEX CONCURRENTLY(不能放在事务块内);加非空列先可空再回填;回填分批用 FOR UPDATE SKIP LOCKED。
- 其他:分区选择、全文检索、PgBouncer 连接池(事务模式与预处理语句注意点)、pgvector 的 HNSW/IVFFlat。
使用方式:作为编码与运维参考,配合 EXPLAIN 与检测 SQL 验证改动。
限制:仅为参考文档,未提供安装命令、版本兼容之外的收费或平台信息;实际效果依环境而定,文中未展开的部分(如操作与全文检索细节)指向同库其它文件。