跳转到主要内容

55000 — 对象未处于前置状态

PostgreSQL SQLSTATE 55000(对象未处于前置状态,object_not_in_prerequisite_state)的源码证据、诊断与处理参考。

55000 — 对象未处于前置状态

速览

55000 表示请求的操作缺少某个必要的对象或服务器状态。本页选择 currval 所需的会话级序列前提;预加载、恢复和无效索引是不同机制。

字段
SQLSTATE 55000
条件名 object_not_in_prerequisite_state
状态 有效
已知存在于 7.4
锁定快照 9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3
ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE
别名

含义

currval 按后端会话记录状态。创建序列,或在另一个会话调用 nextval,都不会初始化当前会话。固定序列模板为 currval of sequence "%s" is not yet defined in this session,严重级别为 ERROR

其他固定的 55000 路径有不同前提:pg_stat_statementspg_stat_statements must be loaded via "shared_preload_libraries",应按正常配置流程加入启动参数并重启服务;pg_surgeryrecovery is in progress,detail 为 Heap surgery functions cannot be executed during recovery.,应等待恢复完成,或在合适的可写 primary 上执行;pgstattupleindex "%s" is not valid,应先检查索引,并按适当的 REINDEX 或迁移流程重建后再调用。它们都是对象或服务器状态检查,不是权限错误,也不能与会话级序列案例互相替代。

诊断

先确认对象状态以及对象所属的后端会话。对本路径,确认序列并检查这个 backend 是否调用过 nextval;连接池中另一个连接调用过也不满足当前会话前提。在显式事务中,失败的 currval 会使事务中止,因此修复前要执行 ROLLBACKROLLBACK TO SAVEPOINT。其他 55000 路径还要检查恢复状态、预加载设置、索引有效性或对象自身前提。

处理

在同一 backend 先调用 nextval 再调用 currval;如果业务契约如此设计,也可以传入明确已知的值。自动提交时失败语句的事务已结束,可以重新发起下一条语句;显式事务中则先回滚或回滚到保存点,再调用 nextval。不要把它当作权限错误,也不要假设连接池中另一个连接的成功调用会初始化当前连接。

实测诊断

选定源码组为 ERROR,使用上述动态序列名模板。实测诊断中的序列名为 currval_sequence;错误后自动提交会话仍为 IDLE,同一会话随后通过 nextvalcurrval 返回 10。

代表案例

选定注册表在一个自动提交 backend 上创建序列,然后在尚未调用 nextval 时调用 currval,再用 nextval(返回 10)初始化并再次读取 currval(返回 10)。失败调用、修复和验证属于同一会话状态转换;本案例不测试连接池切换。

CREATE SEQUENCE sequence_identifier START WITH 10;
SELECT currval('sequence_regclass');
SELECT nextval('sequence_regclass');
SELECT currval('sequence_regclass')

选定的 PostgreSQL 18.6 与 10.21 运行均通过 SQLSTATE、严重级别、状态或断开恢复、修复、清理和一次性实例停止断言。详见 案例 JSON作者证据

版本

锁定目录从 7.4 起记录 55000。18.6 与 10.21 的序列会话案例均通过;这不覆盖其他 55000 分支,也不推断所有中间版本。

来源

  • src.errcodes.18.6src/backend/utils/errcodes.txt at 724edf9bde9d356724ad384a2e196edc3c9f80f7; blob SHA-256 6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba (source).
  • src.currval.18.6src/backend/commands/sequence.c at 724edf9bde9d356724ad384a2e196edc3c9f80f7; blob SHA-256 3e5afe17d5a84862fae502a5481211220368f1d639e9d07ba6f96ee8be92a8d8 (source).
  • src.currval.10.23src/backend/commands/sequence.c at 02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4; blob SHA-256 5510e1266e8d8c548a4318d753392e92e689d348f3353a2aa53d8dea871c44ab (source).
  • src.path.0contrib/pg_stat_statements/pg_stat_statements.c at 724edf9bde9d356724ad384a2e196edc3c9f80f7shared_preload_libraries 检查(来源)。
  • src.path.1contrib/pg_surgery/heap_surgery.c at 724edf9bde9d356724ad384a2e196edc3c9f80f7 的恢复状态检查与 detail(来源)。
  • src.path.2contrib/pgstattuple/pgstatindex.c at 724edf9bde9d356724ad384a2e196edc3c9f80f7 的无效索引检查(来源)。
  • src.calls.REL_18_6 / src.calls.REL_10_23 — fixed call scans, SHA-256 9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf / 00d16d3eb01b71ccf1b245c8f3102f9d0ec9f36fb02777b8dd1b99fcb263040c.
  • manifest.55000 / snippet-registry.55000 — hashes are recorded in evidence/55000.json and each selected runtime record.