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

升级至MariaDB 11.8.2后无AS OF语法查询系统版本表无结果

问题:MariaDB 11.8.2升级后无AS OF语法的SYSTEM_VERSIONED表查询无结果

现象

升级至MariaDB 11.8.2后,查询带系统版本控制的表时,普通无FOR SYSTEM_TIME子句的查询返回空结果:

SELECT
    m.*
FROM
    mydb.mytable m

但使用显式指定时间或查询全版本的语句可正常返回数据:

SELECT
    m.*
FROM
    mydb.mytable FOR SYSTEM_TIME AS OF NOW() m
SELECT
    m.*
FROM
    mydb.mytable FOR SYSTEM_TIME ALL m

额外验证信息:

  • 表中隐式列row_start(起始于过去时间)、row_end(截止到2038年)值均正常
  • SELECT @@timestamp, NOW(), system_time()返回的时间值符合预期
  • 插入新数据后,普通查询可正常返回该新数据
  • 相同MariaDB 11.8.2 + Debian版本的开发环境无此异常

排查与解决方案

1. 检查会话级系统时间变量

全局时间正常但会话级变量可能错位,在出问题的会话中执行:

SELECT @@session.system_time;

若返回值非当前正常时间,执行以下命令重置:

SET SESSION system_time = CURRENT_TIMESTAMP;

2. 重建表元数据

升级过程可能导致版本控制元数据损坏,尝试强制刷新表元数据:

ALTER TABLE mydb.mytable FORCE;

若无效,可备份后重建表(先备份再操作):

mysqldump mydb mytable > mytable_backup.sql
DROP TABLE mydb.mytable;
mysql mydb < mytable_backup.sql

3. 对比环境变量差异

生产与开发环境的会话变量可能存在差异,执行以下命令导出变量并对比:

SHOW SESSION VARIABLES LIKE '%time%';

重点检查system_time、time_zone等变量的一致性。

4. 验证版本特定Bug

若上述操作无效,可尝试临时降级至11.8.1或升级至最新11.8.x小版本,确认是否为版本特定触发的问题。

临时替代方案

若暂时无法彻底修复,可在会话中默认设置系统时间为当前时间,或修改应用查询语句添加FOR SYSTEM_TIME AS OF NOW()子句:

SET SESSION system_time = CURRENT_TIMESTAMP;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:59:50