SuperAPI AI 工具集

postgres-core-schema-design

数据与分析

查看项目

更新于 10-15 22:18

技能介绍

用途:在第一次 CREATE TABLE 之前,定下 PostgreSQL 的标识符命名、模式(schema)布局、主键列生成方式与权限默认值,四类决定一旦建表后返工代价很高。资料给出的四类常见问题是:大小写混乱(camelCase 迫使所有引用加引号)、serial 的隐式序列权限语义、可写的 public 模式、SECURITY DEFINER 函数未固定 search_path 被调用方劫持。

主要能力:1) 主键选择:v10+ 一律用 GENERATED ... AS IDENTITY,不再用 serial;系统发号用 GENERATED ALWAYS AS IDENTITY,迁移导入可用 OVERRIDING SYSTEM VALUE;需要应用供号用 GENERATED BY DEFAULT AS IDENTITY。2) 命名:全部小写 snake_case,表、列、索引、序列、函数一致;外键用 <被引用实体>id;连接表按字母序 <a><b>;索引 <table><column(s)><type>_idx。3) public 模式加固:v15 之前初始化的库必须执行 REVOKE CREATE ON SCHEMA public FROM PUBLIC,v15+ 新建库 initdb 时已撤销。4) SECURITY DEFINER 函数必须 SET search_path = pg_catalog, <可信模式>, pg_temp 并尽量限定模式名。5) 多模式布局:按模块分 auth/app/etl/reporting 等模式,配 ALTER ROLE ... SET search_path 与 ALTER DEFAULT PRIVILEGES。6) 多租户取舍:租户少且需强隔离用 schema-per-tenant;50 到 1 万租户用 RLS 加 tenant_id;超过 1 万或合规要求用 database-per-tenant。

使用方式:按资料中的决策树选择主键、租户模型、是否需要引号、是否固定 search_path、表放哪个模式;用给出的 SQL 示例落地,如 GENERATED ALWAYS AS IDENTITY、REVOKE CREATE、SET search_path。命令需保持原样执行。

适用场景:新建库、多租户设计、编写或审计 SECURITY DEFINER 函数、接手 public 模式开放的旧库、选定主键与命名规范。

限制:不覆盖 RLS 策略编写、角色与 GRANT 模型、索引命名与设计、迁移执行(锁时机、NOT VALID + VALIDATE),这些分别属于资料中提到的其他技能。具体价格、平台支持与效果数据暂未提供。