用途:为 PostgreSQL 设计专用 schema,覆盖最佳实践、数据类型、索引、约束、性能模式与高级特性。
核心规则:引用表(用户、订单等)定义主键,优先 BIGINT GENERATED ALWAYS AS IDENTITY,仅需全局唯一或不透明 ID 时用 UUID;先按 3NF 规范化,仅在读性能经实测确有问题时反规范化;语义需要处加 NOT NULL 与 DEFAULT;为实际查询路径建索引,外键列需手动建索引;事件时间用 TIMESTAMPTZ,金额用 NUMERIC,字符串用 TEXT,整数用 BIGINT。
常见陷阱:未加引号标识符会转小写,建议 snake_case;UNIQUE 允许多个 NULL,PG15+ 可用 NULLS NOT DISTINCT;序列/identity 存在空洞属正常;堆存储默认无聚簇主键;MVCC 更新删除产生死元组由 vacuum 处理。
数据类型:优先 TEXT 而非 VARCHAR(n)/CHAR(n),长度限制用 CHECK;不用 timestamp、money、timetz、serial;布尔用 BOOLEAN;枚举适合小且稳定的集合,业务易变状态用 TEXT+CHECK 或查找表;数组、范围类型、网络类型、几何类型、TSVECTOR 全文检索、DOMAIN、复合类型、JSONB(优先于 JSON)、pgvector 向量类型。索引类型含 B-tree、复合、覆盖 INCLUDE、部分、表达式、GIN、GiST、BRIN。
使用方式:提供建表、索引、分区(RANGE/LIST/HASH,PG10+ 声明式)、行级安全、约束(PK/FK/UNIQUE/CHECK/EXCLUDE)、安全演进(事务性 DDL、CREATE INDEX CONCURRENTLY)、生成列、扩展(pgcrypto、pg_trgm、citext、timescaledb、postgis、pgvector、pgaudit)与 JSONB 索引指导,并附 users、orders、profiles 建表示例。
限制:分区表不支持全局 UNIQUE 与来自分区表的外键,需含分区键或用触发器;CONCURRENTLY 不能在事务中运行;JSONB 的 jsonb_path_ops 仅支持包含查询;部分索引不适用于 ON CONFLICT。具体版本可用性以官方文档为准,资料未提供收费与价格信息。