【问题标题】:Hsqldb 2.5.0 SYSTEM VERSIONINGHsqldb 2.5.0 系统版本
【发布时间】:2023-07-08 11:40:01
【问题描述】:

我想使用 2.5.0 版附带的系统版本控制,但是当我启动以下类型的请求时:

SELECT firstname, lastname, email FROM customer FOR SYSTEM_TIME AS OF CURRENT_TIMESTAMP - 1 YEAR

当有一些刚刚插入的记录时,它没有找到任何记录...

【问题讨论】:

    标签: hsqldb


    【解决方案1】:

    您的查询意味着“返回一年前存在的行”。因为您最近插入了行,或者最近添加了系统版本控制,所以查询不返回任何行。

    【讨论】:

      【解决方案2】:

      由于我发现了一些我希望对 Hsqldb 2.5.x 附带的系统版本控制做的事情,我允许自己发布这个答案。

      要检索行的先前版本,即当前版本之前的最后一个版本,或者更简单地说,要查找 1 年所做的所有 UPDATE,只需执行查询:

      SELECT previous.* FROM customer AS current, customer FOR SYSTEM_TIME
      FROM CURRENT_TIMESTAMP - 1 YEAR TO CURRENT_TIMESTAMP AS previous
      WHERE current.customerid = ? AND previous.customerid = ? AND
      current.start = previous.stop;   
      

      假设:

          start: is the column declared as TIMESTAMP GENERATED ALWAYS AS ROW START.
          stop: is the column declared as TIMESTAMP GENERATED ALWAYS AS ROW END.
          customerid: is the primary key to the customer table, because I have to find the UPDATE for each customer.
      

      我现在必须找到 INSERT 和 DELETE 查询,我会回来的。

      PS:我没有发明任何东西,它来自 BD2 文档,所以它可能不是最佳的,但它适用于 Hsqldb 系统版本控制。

      编辑:这个答案并不令人满意,see here 更好的东西

      【讨论】: