关于 db-platform-fit
db-platform-fit 是审计托管数据库平台约束的技能,适用于数据库平台与架构评估。它检查引擎版本、平台功能支持、连接方式及锁定取舍,并要求价格和生命周期信息以供应商资料为准。
主要功能
- 01检查引擎版本与平台支持范围
- 02核对外键和 RLS 等功能约束
- 03识别无服务器环境中的直连连接
- 04梳理平台锁定与成本类别
- 05通过查询验证平台配置
适用场景
- 01评估数据库模式与托管平台的兼容性
- 02检查 Supabase 表的 RLS 状态
- 03核实 PlanetScale 外键约束是否生效
- 04审查无服务器应用的数据库连接方式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill db-platform-fit安装后在 Claude Code 中输入/db-platform-fit确认已加载。
详细介绍
db-platform-fit(M21)— 版本 · 定价/锁定 · 各平台功能支持
M21 根据托管平台施加的限制审查项目,而非仅审查底层引擎。 同一套 Postgres 架构在 Neon(无服务器、缩至零、分支)与 RDS、Supabase(以 RLS 为核心、PostgREST)上的表现各不相同。审查结果会影响两个方面:功能缺口(外键支持、RLS)属于设计问题;连接、冷启动和版本问题属于性能问题。
检查内容
- 版本时效性 — 声明或检测到的引擎版本与平台当前支持范围的对比。明确标记过旧的主版本。绝不编造 EOL 日期或“支持至”日期。 如果找不到可引用来源来确认确切的 EOL 信息,应注明“较旧的主版本,请向平台确认支持期限”,并标记
confidence: directional。使用WebFetch时,可以引用供应商发布的版本页面;应直接引用,不要转述无法从来源核实的数字。 - 如实说明定价/锁定 — 指明锁定方面的权衡(专有功能:Supabase Auth/RLS 耦合、PlanetScale Vitess 分片、D1 的 SQLite 方言、DynamoDB 单表设计、Aurora 存储格式)。绝不编造价格、每 GB 成本或行数/请求配额。 说明成本类别(如出口流量、分支计算、读/写单位),并指出具体数值必须以供应商当前定价页面为准。仅标明大致级别。
- 各平台的功能支持 — 外键支持是重点检查项:
- PlanetScale / Vitess — 历来不强制执行外键(且分片外键受到限制);依赖数据库强制执行外键的架构需要在应用层保障完整性,或了解
FOREIGN_KEY_CHECKS。→ 设计 + 性能;声明了外键但无法强制执行时,严重级别为 4。 - Cloudflare D1 / SQLite — 支持外键,但必须启用
PRAGMA foreign_keys;并发能力有限,且数据库大小有上限。 - DynamoDB / Firestore — 完全不支持外键/联接;完整性由应用负责(M3 负责迁移)。
- 无服务器驱动(Neon/PlanetScale HTTP、D1) — 从无服务器/边缘环境直接使用长期运行的 PG 连接属于反模式 → 交叉检查
db-connection-pooling(M15)。 - Supabase — 任何通过自动 REST/Realtime API 暴露的表都必须启用 RLS → 交叉检查
db-security-access(M10);暴露的表未启用 RLS 时,严重级别为 5(设计)。 - CockroachDB / Yugabyte — 与 PG wire 兼容,但属于分布式数据库:串行/序列可能成为热点、不支持某些 PG 扩展、默认隔离级别不同。
- PlanetScale / Vitess — 历来不强制执行外键(且分片外键受到限制);依赖数据库强制执行外键的架构需要在应用层保障完整性,或了解
Tier-0 静态检查
根据 references/detection-signals.md 中的信号检测平台(supabase/ 目录、
@planetscale/database、@neondatabase/serverless、wrangler.toml [[d1_databases]]、
@libsql/client、连接字符串/依赖项中的 cockroach/yugabyte)。从配置/迁移文件中解析声明的引擎版本。将声明的外键约束与平台的外键支持情况交叉核对。
检测无服务器/边缘入口点中使用的直接 PG 驱动(pg、Pool)。
Tier-1 验证查询
- Postgres 系列:
SELECT version();和SHOW server_version;。 - MySQL/PlanetScale:
SELECT VERSION();和SELECT @@foreign_key_checks;;检查声明的外键是否确实存在:SELECT * FROM information_schema.table_constraints WHERE constraint_type='FOREIGN KEY'; - Supabase RLS:
SELECT relname, relrowsecurity FROM pg_class WHERE relkind='r';和pg_policies。 - D1/SQLite:
PRAGMA foreign_keys;。无法连接引擎/平台时 → 标记为needs_api,绝不能误报为pass。
发现
按 schema/finding.schema.json 输出。示例 ID:
M21.platform.fk_unenforced_on_vitess— 声明了 FK 约束,但 PlanetScale/Vitess 不会强制执行这些约束 (fail,严重性 4,维度both,置信度:静态分析为directional/ 使用 Tier-1 时为established)。M21.platform.rls_off_supabase— 通过 Supabase API 暴露的表已禁用 RLS(fail,严重性 5, 维度design,使用 Tier-1 时置信度为established)。M21.platform.engine_version_old— 明显较旧的引擎主版本(warn,严重性 3,维度both, 置信度directional;不得编造 EOL 日期——应引用供应商页面或暂缓判断)。M21.platform.serverless_direct_pg— 来自边缘/无服务器环境的直接长期 PG 连接(warn, 严重性 4,维度performance;交叉引用 M15)。 每条发现:evidence.observed引用真实配置/DDL/版本字符串,逐字照录(须对机密信息脱敏);verification.reproduce使用上文中可运行的$DATABASE_URL命令;verification.method为connection_introspect、schema_introspect或manual_review;expected_impact包含{axis, confidence, magnitude, rationale}——使用分档描述,绝不使用单独的百分比。
诚实性
- 绝不编造 EOL 日期、价格或配额,无论是在发现还是设计建议中。通过
WebFetch引用(并引述)供应商的 当前页面,或使用directional暂缓判断,并注明“请在供应商页面确认”。 - 锁定效应是一种权衡,并非自动构成缺陷:应说明需要放弃什么,不要做价值评判。
- 对于没有引用来源证明 EOL 的“旧”版本,置信度为
directional,且绝不据此封顶。FK 未强制执行时,最高严重性为 4 (除非会直接导致财务/身份验证记录孤立,此时除外)。无法访问的平台 →needs_api。
评论
支持 Markdown