数据系统

PostgreSQL 事务与 AI 任务状态

用事务、唯一约束和状态机保证会话、任务与工具副作用的一致性。

必须掌握PostgreSQL事务

Agent 会同时写会话、运行记录、工具结果和计费数据。任何一步失败都可能留下半完成状态,因此必须先掌握事务。

核心模型

PostgreSQL 事务把多个步骤组合成全有或全无的操作。未提交的中间状态对其他事务不可见;失败时可以 ROLLBACK。

推荐表结构

  • conversations:稳定的会话身份。
  • runs:一次 Agent 运行,状态为 queued、running、succeeded、failed、cancelled。
  • messages:输入输出消息,带 sequence 唯一约束。
  • tool_calls:工具参数、结果、耗时与错误。
  • outbox:需要异步投递的事件。

工程要点

使用数据库唯一约束实现最终幂等,避免只在应用内判断。状态更新带旧状态条件,例如只允许 running 转为 succeeded。跨服务事件使用 transactional outbox,先和业务数据一起提交,再由后台任务投递。

练习

模拟同一幂等键并发提交两次,证明只产生一条 run。随后在消息写入后故意抛错,检查整个事务是否回滚。

官方资料

PostgreSQL Transactions 解释 BEGIN、COMMIT、ROLLBACK 与 SAVEPOINT。