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

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

百科 / SQL 状态码 / Class 72 快照失败

72000 snapshot_too_old

ERROR 源码确认 详解 已移除 未实测

类别
Class 72 快照失败
严重等级
ERROR
条件名
snapshot_too_old
宏名称
ERRCODE_SNAPSHOT_TOO_OLD
最早已知存在
9.6.0
状态
已移除(边界未取证)

版本覆盖

  1. 18
  2. 17
  3. 16
  4. 15
  5. 14
  1. 13
  2. 12
  3. 11
  4. 10
  5. 9.6
  6. 9.5
  7. 9.4
  8. 9.3
  9. 9.2
  10. 9.1
  11. 9.0
  1. 19 beta
  2. 20 dev

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

速览

72000 是历史 snapshot_too_old 错误。PostgreSQL 16.15 仍定义并发出它;该 SQLSTATE 在 PostgreSQL 17 大版本移除。因此 16.15 是最后一个大版本线中的后续小版本快照,不是移除点。

含义

固定的 16.15 源码中,old_snapshot_threshold 是 PGC_POSTMASTER 整数 GUC,-1 关闭功能。TestForOldSnapshot 内联 guard 要求阈值非负、快照为 MVCC 或 TOAST 且 LSN 有效,并且页面 LSN 晚于快照;随后调用 TestForOldSnapshot_impl,它还要求关系是允许提前清理的永久、非系统目录关系,并比较 snapshot.whenTaken 与 GetOldSnapshotThresholdTimestamp()。快照太旧时发出 ERROR 72000,主消息为 snapshot too old。

阈值时间戳由旧快照的时间到 XID 映射维护,供提前清理和 vacuum 使用。PG16.15 文档说明阈值之前已死数据可以被 vacuum,读取在快照建立后修改过的页面可能失败;物化游标或系统目录可能不触发错误。为检测条件而保留的关系空间不会直接归还 OS,除非显式执行 VACUUM FULL 等操作。

消息

  • ERROR,SQLSTATE 72000:snapshot too old。

锁定目录在 PG17/18 没有当前定义行。不要推断替代 SQLSTATE,也不要把无关的当前错误声称为等价物。

报文模板

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

主消息 snapshot too old

来源: 来源:src/backend/storage/buffer/bufmgr.c @ REL_16_15

诊断

在 PostgreSQL 9.6–16 上记录大版本、SHOW old_snapshot_threshold、事务快照年龄、关系类型、页面读取路径以及 vacuum/提前清理历史。检查关系是否被 guard 排除(例如系统目录)、读取是否使用物化游标或结果集,以及设置是否在服务器启动时生效。源码核验不能建立实际集群的阈值或清理历史。

处理

这是语句级 ERROR;显式事务中继续发 SQL 前先回滚整个事务,或回到已经建立的保存点。旧快照无法原地修复:结束或缩短长期读取事务,按历史大版本设置合适的启动配置(GUC 为 PGC_POSTMASTER,修改需重启),再以幂等边界重跑整个读取单元。PG17 及以后应先确认当前错误和机制,不要仅凭历史名称安装 72000 handler。

版本

锁定定义文件记录 72000 从 9.6.0 到 16.15,PG17/18 无定义。16.15 源码提供 GUC 与 guard;固定缓冲区管理器发出路径来自 commit 7d3e000c5961a544302072058a1184e9a588837b。目录边界说明它在 PG17 大版本线移除,而不是在 16.15 小版本移除。

来源

证据

断言

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

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 72 快照失败 Snapshot Failure 1 个 ↗
72000 snapshot_too_old ERRCODE_SNAPSHOT_TOO_OLD ERROR 9.6.0 起已知
快照过旧无法读取该行,PG 17 已移除此码。 已移除(边界未取证)