工具笔记
让 AI 修注册竞态:两次请求只能成功一次
让数据库唯一约束处理并发下的最后一步。

资料核验2026.11.12 · PostgreSQL · 以部署版本文档为准
注册接口先查用户名,再插入记录。两次并发请求都能在插入前查到空结果,于是两个请求都以为名字可用。前置检查可以给人更早的提示,但它和写入之间还有一个窗口。
让助手从这一步开始
给助手一个带先查后插的注册入口和两条同名请求。要求它用测试库复现竞争,再用数据库约束守住写入点。应用层把约束错误映射为已有的名称冲突提示。

把规则落在写入发生的地方
给用户名设置唯一约束。如果大小写要视为相同,先明确规范化规则,保证检查与约束用同一种身份。插入失败后,把唯一冲突转换成可理解的提示。
验收时使用两个连接同时提交同一名字。应当只有一条记录成功,另一个请求得到名称已占用的响应。
已经有历史数据时,先找重复项,再建约束。清理规则需要业务确认,不能按创建时间随便保留一条。
把问题变成可重跑的样例
两个连接同时注册名字 miao-test。测试前确保这个名字不存在,结束时执行计数查询并核对请求结果。若约束依赖规范化键,再加一对大小写不同但应视为同名的样例。
核对这几项输出
- 同时提交后只有一条记录。
- 失败请求能读懂原因。
- 普通不同名注册仍成功。
- 大小写按产品明确的规范化规则判断。
怎么判断改动能不能收
如果助手只在应用再查一次,竞争窗口仍存在。用两个连接触发并发,再在数据库回读实际结果。迁移前先列出现有重复记录,如何合并由业务规则决定。
约束错误处理不要按数据库返回的完整英文字符串匹配。让助手用部署驱动可得到的错误代码和约束身份判断,再核对别的约束错误不会被误报为名字被占用。用同一 API 看冲突和正常路径的状态。

