You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QLDB控制台单次执行同一文档多更新时历史未完整记录问题咨询

QLDB历史未记录单次执行中同一文档的多次更新操作

问题现象

  • 在QLDB控制台单次执行多条针对同一文档的UPDATE语句时,仅最后一次更新会被写入历史记录;分多次执行这些语句时,所有更新操作的版本都会被完整保留。

示例复现步骤

1. 初始化表与数据

执行以下语句创建表、索引并插入初始数据:

CREATE TABLE T;

CREATE INDEX ON T (uid);

INSERT INTO T VALUE
{
  'status' : 'NEW',
  'uid' : '1401149b-a7ea-4f17-bebc-7cbe48847cde'
};

2. 单次执行多条更新

在控制台的同一执行框中连续运行两条更新语句:

UPDATE T SET status = 'IN_PROGRESS' WHERE uid = '1401149b-a7ea-4f17-bebc-7cbe48847cde';
UPDATE T SET status = 'COMPLETED' WHERE uid = '1401149b-a7ea-4f17-bebc-7cbe48847cde';

3. 查询历史记录

执行历史查询语句查看版本:

select * from history(T) AS h where h.data.uid = '1401149b-a7ea-4f17-bebc-7cbe48847cde';

结果仅显示2个版本:初始的NEW状态版本,以及最终的COMPLETED版本,中间的IN_PROGRESS状态版本未被记录。

对比场景:分多次执行更新

若将两条UPDATE语句分两次在控制台单独执行,历史记录会显示完整的3个版本:NEW → IN_PROGRESS → COMPLETED。

原因解析

QLDB控制台中单次执行的多条语句会被封装在同一个事务中。在单个事务内,对同一文档的多次更新会被合并处理,事务提交时仅将文档的最终状态持久化到历史链中,中间临时状态不会被记录。

而分多次执行时,每个操作都是独立事务,每个事务的更新都会生成一个新的文档版本,所有版本都会被完整保留在历史记录里。

处理方案

如果需要保留所有中间更新状态的历史记录,需将每个UPDATE操作作为独立事务执行:

  • 在QLDB控制台中,每次仅执行一条UPDATE语句,完成后再执行下一条。
  • 通过SDK开发时,确保每个更新操作启动单独的事务并提交。

内容的提问来源于stack exchange,提问作者sambogoat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:10:17