#Vibe Coding#AI Agent#TypeScript#DevOps

Vibe Coding 数据库只读勘察:改模型前确认真实 Schema 与数据形状

ORM 模型和迁移文件不一定等于目标数据库现场。本文用最小权限、只读事务、系统目录、聚合统计和非执行计划核对 Schema 与数据形状,同时避开敏感正文、写函数和 EXPLAIN ANALYZE 的隐含执行。

本文要点

  • 主题聚焦:Vibe Coding、AI Agent、TypeScript、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年7月30日·更新于 2026年7月30日

仓库里的 ORM schema 说 email 非空,不代表目标数据库已经加上约束;最新迁移创建了索引,也不代表某个长期环境已经执行。反过来,数据库里可能有紧急索引、旧枚举值或历史脏数据,代码从未记录。AI 若只相信其中一侧,就可能生成无法应用的迁移,或把真实兼容问题误判成类型错误。

Vibe Coding 的数据库勘察先回答事实,不修事实。它与数据模型与业务不变量的规格设计、Expand-Contract 数据库迁移的发布步骤不同;本阶段不导入、不回填、不建索引,只形成“目标现场是什么”的只读证据。

先确认目标与授权

连接前明确环境、数据库、schema、角色、允许查询范围和数据敏感等级。能连上不等于获准读取全部表,测试凭据也不能默认指向生产。先从配置与环境矩阵核对变量来源,但不得把连接串、密码或证书放进 Agent 上下文和报告。

防线至少有三层:数据库角色只授予必要 catalog 与目标表的 SELECT;会话或事务显式 read only;执行器再限制为批准的查询模板。只靠提示词“不要写”不够,只靠 read-only transaction 也不够,因为权限过大的账号和自定义函数仍会扩大风险。

以 PostgreSQL 为例,可在任何业务查询前开启只读事务,并用 rollback 结束:

sql
BEGIN TRANSACTION READ ONLY;
SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_schema = 'app';
ROLLBACK;

PostgreSQL 的 read-only transaction 会阻止对非临时表的常规写命令,但它不是外部副作用沙箱。不要调用语义不明的函数、扩展或运维过程;最小权限角色仍是主要边界。不同数据库对 read-only、临时对象和系统目录的语义不同,不能把这段 SQL 原样套到 MySQL、SQLite 或云代理。

先看结构,再决定是否看数据

结构收据至少包含数据库产品与版本、schema、表与视图、列类型、nullable、default、主外键、唯一与检查约束、索引、枚举或 domain。标准 information_schema 提供可移植视图,但只显示当前用户有权访问的对象,且产品特有索引和表达式往往要查官方系统目录。

“目录里没有”可能表示对象不存在,也可能表示权限不可见。报告必须保留当前角色和查询范围,不能把权限盲区写成否定事实。视图还要追定义与安全边界;只看到列名不代表知道数据来自哪张表或是否按租户过滤。

把现场与三份仓库证据对照:当前模型、按序迁移、应用查询。分类为 MATCH、DB_AHEAD、CODE_AHEAD、DRIFT 或 UNKNOWN。不要在勘察阶段裁决哪边正确;先记录对象身份和可能影响,再交给迁移计划。

数据形状从低暴露统计开始

确认确有必要后,优先查询行数级别、空值数、distinct 数、最小最大长度、时间范围和状态枚举计数。不要先 SELECT *,不要导出全表,也不要把邮箱、token、聊天正文或自由文本样例交给模型。若唯一性风险可由重复数量证明,就无需展示重复值本身。

样本必须说明目的、列白名单、行数上限和脱敏方式。随机抽样可能昂贵,也未必覆盖边界;更可靠的是按已知风险构造聚合,例如“规范化邮箱后冲突的分组数”。任何结果都绑定采集时间与隔离级别,因为在线数据在查询间可能变化。

数据库只读不代表查询廉价。全表聚合、无界排序和复杂视图仍会消耗 I/O、锁资源或副本容量。先获取表规模和索引事实,设置 statement timeout,并在超出预算时停止;不要为得到“更完整证据”影响业务。

正确使用查询计划

EXPLAIN 可查看 planner 选择的计划而不执行目标语句;EXPLAIN ANALYZE 会实际运行语句并附带真实统计。后者即使写着 EXPLAIN,也绝不能在只读勘察中被当成无副作用命令;对修改语句尤其危险,对 SELECT 也可能触发昂贵计算或不可信函数。

只对已批准、参数已脱敏的 SELECT 使用普通 EXPLAIN,并记录统计信息新鲜度和参数假设。计划只解释当前版本、配置和统计下的选择,不能证明生产延迟,也不能凭估算行数直接创建索引。数据库查询计划与 N+1 审查负责代表性数据上的性能归因;只读勘察不借此越权运行真实负载。需要真实计时时,另建受控副本或获得明确性能实验授权。

形成勘察报告并停下

报告列出已确认对象、仓库与现场差异、低暴露统计、查询计划、权限盲区、未运行项和建议的下一条代码调查。关键结论引用查询模板及结果摘要,不附原始敏感行。若发现 drift,不自动运行迁移;若发现疑似脏数据,不自动修复或导出。

编程 Agent 的 Sandbox 与权限设计提供执行侧最小权限。数据库勘察完成的标准则是:reviewer 知道连的是哪个目标、为什么查询确为只读、看到了哪些结构与分布、哪些事实仍不可见。只有这些边界明确,后续模型或迁移设计才有可靠起点。

延伸阅读

Related

相关推荐