↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 状态码 / Class XX 内部错误

XX001 data_corrupted

XX001 — data_corrupted

ERROR 源码确认 详解 未实测

类别
Class XX 内部错误
严重等级
ERROR
条件名
data_corrupted
宏名称
ERRCODE_DATA_CORRUPTED
最早已知存在
7.4
状态
有效

手册收录:8.1、8.2、8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、11、12、13、14、15、16、17、18、19、20。此处仅表示同版本手册收录,运行证据仍以原核验构建为准。

版本覆盖

版本条依据已采样构建显示;灰色版本可能尚未采样,悬停可查看。手册链接随版本选择,源码和运行证据保持原核验构建。

XX001

速览 {#at-a-glance}

XX001 报告完整性不变量失败。固定源码覆盖 PGLZ TOAST 数据损坏、堆中不可能的 MultiXact/XID freeze 状态,以及 amcheck 检测到的元组/索引不匹配(其根因仍可能是堆/HOT 链)。

含义 {#meaning}

TOAST 解压器无法解码保存的压缩 datum 时,会以 ERRCODE_DATA_CORRUPTED 报错。堆 freeze 在 MultiXact 早于 relminmxid、在 freeze cutoff 前仍运行,或带有早于 relfrozenxid/可移除 cutoff 的 update XID 时,也使用此码。这些是存储数据和事务元数据的一致性检查,不是普通输入错误。

amcheck 的 heapallindexed 回调报告堆元组缺少匹配的索引元组。源码注释明确指出,表面上的索引扫描问题仍可能源于堆损坏、错误的 HOT 安全性判断或其他底层故障;可选提示只是建议使用更强的检查函数。

消息 {#messages}

  • ERROR,SQLSTATE XX001:compressed pglz data is corrupt。
  • ERROR,SQLSTATE XX001:found multixact %u from before relminmxid %u。
  • ERROR,SQLSTATE XX001:multixact %u from before multi freeze cutoff %u found to be still running。
  • ERROR,SQLSTATE XX001:multixact %u contains update XID %u from before relfrozenxid %u。
  • ERROR,SQLSTATE XX001:multixact %u contains committed update XID %u from before removable cutoff %u。
  • ERROR,SQLSTATE XX001:heap tuple (%u,%u) from table "%s" lacks matching index tuple within index "%s"。
    • 通过 bt_index_check 进入时(该入口取得 AccessShareLock,并向回调传入 readonly=false),提示为:Retrying verification using the function bt_index_parent_check() might provide a more specific error. bt_index_parent_check 入口取得 ShareLock、传入 readonly=true,不会附加这个提示。这里的 readonly 是内部校验模式,与 SQL 事务的 transaction_read_only 设置无关。

诊断 {#diagnosis}

保留完整消息与标识符、关系/索引名称、数据块/页面上下文、校验和与副本比较、日志以及首次发现不变量的操作。TOAST 要定位所属表和压缩 datum 路径;堆消息要检查 relfrozenxid/relminmxid 与 MultiXact 历史,不能手工改系统目录。对 amcheck 记录调用的是 bt_index_check/AccessShareLock 还是 bt_index_parent_check/ShareLock,以及是否有提示;不要先假定索引是根因。

处理 {#response}

按完整性事件处理。显式事务中的 ERROR 需要先 ROLLBACK,或回到已有保存点,再发送 SQL;回滚不会修复存储对象。用只读流程比较可信备份、副本、校验和和存储历史,再按事故方案恢复或重建受影响表/TOAST 数据。只有证据确认损坏局限于索引时才考虑 REINDEX;它不是堆、TOAST、XID 或 MultiXact 不变量的通用修复。若另有 FATAL 或进程终止,恢复后使用新连接;不要为测试而制造损坏。

版本 {#versions}

锁定目录从 7.4 记录此条件;固定 TOAST、堆和 amcheck 源码覆盖 PostgreSQL 18.6。本源码页没有运行损坏或崩溃实验。

相关 {#related}

XX002、58030、72000

来源 {#sources}

src/backend/access/common/toast_compression.c#L90-L100

src/backend/access/heap/heapam.c#L6983-L7042

contrib/amcheck/verify_nbtree.c#L2760-L2818

contrib/amcheck/verify_nbtree.c#L252-L305

contrib/amcheck/verify_common.c#L60-L149

结构化证据记录保存完整性消息组、条件提示和源码/运行边界。

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 compressed pglz data is corrupt

来源: 来源:src/backend/access/common/toast_compression.c @ REL_18_6

主消息 found multixact %u from before relminmxid %u

来源: 来源:src/backend/access/heap/heapam.c @ REL_18_6

主消息 multixact %u from before multi freeze cutoff %u found to be still running

来源: 来源:src/backend/access/heap/heapam.c @ REL_18_6

主消息 multixact %u contains update XID %u from before relfrozenxid %u

来源: 来源:src/backend/access/heap/heapam.c @ REL_18_6

主消息 multixact %u contains committed update XID %u from before removable cutoff %u

来源: 来源:src/backend/access/heap/heapam.c @ REL_18_6

主消息 heap tuple (%u,%u) from table "%s" lacks matching index tuple within index "%s"
HINT Retrying verification using the function bt_index_parent_check() might provide a more specific error.

来源: 来源:contrib/amcheck/verify_nbtree.c @ REL_18_6 · 来源:contrib/amcheck/verify_nbtree.c @ REL_18_6 · 来源:contrib/amcheck/verify_common.c @ REL_18_6

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class XX 内部错误 Internal Error 3 个 ↗
XX000 internal_error ERRCODE_INTERNAL_ERROR ERROR 7.4 起已知
内部错误,也是未显式指定代码的 ERROR 默认码。 有效
XX001 data_corrupted ERRCODE_DATA_CORRUPTED ERROR 7.4 起已知
数据完整性不变量失败,如 TOAST 数据损坏。 有效
XX002 index_corrupted ERRCODE_INDEX_CORRUPTED ERROR 7.4 起已知
索引结构失败,如页面头部或元数据不合法。 有效