用途:为 PostgreSQL 设计专用数据库模式(schema),提供从建表到索引、约束、分区与演进的最佳实践。
主要能力: 核心规则:参考表定义主键,优先 BIGINT GENERATED ALWAYS AS IDENTITY,仅在需要全局唯一或不透明 ID 时用 UUID;先规范化到 3NF,仅在实测收益高时反规范化;语义必需处加 NOT NULL 与 DEFAULT;为实际查询路径建立索引,注意外键列不自动索引。 数据类型:事件时间用 TIMESTAMPTZ,金额用 NUMERIC,字符串用 TEXT,整数用 BIGINT。避免 timestamp、char(n)/varchar(n)、money、timetz、serial。UUID 生成用 uuidv7()(PG18+)或 gen_random_uuid()。还介绍数组、范围、网络、几何、全文检索、域、复合、JSONB、pgvector 向量类型。 约束与索引:主键、外键动作、UNIQUE NULLS NOT DISTINCT(PG15+)、CHECK、EXCLUDE;索引涵盖 B-tree、复合、覆盖、部分、表达式、GIN、GiST、BRIN。 分区:RANGE/LIST/HASH,建议声明式分区或 TimescaleDB 超表,不用表继承;分区表无全局唯一约束,外键需触发器。 专项设计:更新密集、插入密集、Upsert 友好、安全演进(事务性 DDL、CREATE INDEX CONCURRENTLY、生成列)。 JSONB:优先 JSONB 加 GIN;大量包含查询可用 jsonb_path_ops,但会失去键存在查询;标量字段建议生成列加 B-tree。 扩展与行级安全:pgcrypto、pg_trgm、citext、timescaledb、postgis、pgvector、pgaudit 等。
使用方式:直接在建表、加索引、分区与模式变更时参照其规则与示例(如 users、orders、profiles 建表语句)。部分写法需特定版本,如 NULLS NOT DISTINCT 需 PG15+,虚拟列需 PG18+。实施前需结合自身版本与负载验证,资料未提供具体性能数据与平台限制。