用途:在 TypeScript 应用中设计、查询、调优、迁移、审查和运维 PostgreSQL 18(18.6 稳定版,19 处于 beta)。与 ORM 无关,仅把 Drizzle 等作为库提及,给出纯 SQL 及 postgres.js、pg、Bun.SQL 片段。
主要能力:按主题路由到参考文档,包括类型/键/约束/JSONB/枚举/生成列,索引与 EXPLAIN、pg_stat_statements、统计与规划器,分页/N+1/upsert/事务/隔离/锁/队列,零停机 DDL 与回填,全文检索/trigram/分区,角色/权限/RLS/TLS,驱动与连接池/PgBouncer/无服务器,VACUUM/膨胀/备份/PITR/复制/升级,扩展(pg_trgm、pgvector、pg_cron、pg_partman 等),以及审查清单与慢查询分诊手册。
使用方式:先检查环境(服务器版本、托管方式、可用扩展、是否有连接池;驱动与池配置;现有模式与迁移运行器;表规模与流量),再按版本设门槛,PG18 特性需 18,否则提供 14-17 回退。优先用证据而非经验:在真实数据上运行 EXPLAIN (ANALYZE, BUFFERS)、读 pg_stat_statements、查 pg_locks/pg_stat_activity。保留项目既有迁移运行器、命名与模式约定。命令示例使用 bun / bunx,脚本中 psql 加 -v ON_ERROR_STOP=1。
核心判断:让数据库强制不变量;新表用 bigint IDENTITY 或 uuid DEFAULT uuidv7(),避免 serial 与随机 UUIDv4 主键;时间用 timestamptz,金额用 numeric 或整数最小单位;字符串用 text 加 CHECK;JSONB 用于稀疏或外部结构数据;外键列需自建索引;禁止拼接用户输入,用参数化;用 SQL 修复 N+1;用键集分页;事务保持短小;对 40001/40P01 重试整个事务;队列用 FOR UPDATE SKIP LOCKED;迁移设置 lock_timeout 并重试,用 CREATE INDEX CONCURRENTLY、NOT VALID 后 VALIDATE、批量回填、扩展/收缩;连接池按服务器容量而非实例数;迁移角色与应用角色分离;autovacuum 需按热表调优;备份需经恢复验证。
限制:资料未提供具体收费、价格、平台或效果信息;版本与驱动快照需按 source-map.md 刷新;int8 与 numeric 在 JS 驱动中可能以字符串返回,date/timestamptz 解析因驱动而异,需冒烟测试。