选择 打开 改范围 完整检索页

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

百科 / 错误代码 / Class 22 数据异常

2200L not_an_xml_document

ERROR 源码确认 参考 未实测

类别
Class 22 数据异常
严重等级
ERROR
条件名
not_an_xml_document
宏名称
ERRCODE_NOT_AN_XML_DOCUMENT
启用版本
8.3
状态
活跃

版本覆盖

速览

SQL/XML 的 SQLSERIALIZE DOCUMENT 操作收到的输入无法满足所要求的文档形式。PostgreSQL 18.6 会把这个公开的 DOCUMENT 路径映射到带有 XMLOPTION_DOCUMENTxmltotext_with_options;失败或软错误会被映射为 not an XML document。包装器对非 DOCUMENT 且不缩进的提前绕过不属于 CONTENT 模式的 2200L 结论,本页也不涵盖所有 XML 内容或注释违规。

含义

本成员是公开 SQL/XML SQLSERIALIZE DOCUMENT 形式的文档级 XML 失败。该操作把 XMLOPTION_DOCUMENT 传给 xmltotext_with_options;后者用 ErrorSaveContext 调用 xml_parse,没有返回文档或保存的解析错误被设置时,就释放部分文档并报告 2200L。它的提前 guard 会在非 DOCUMENT 且不缩进时直接返回二进制兼容的输入,因此不能把这个映射推广到 CONTENT。较低层的 xml_parse 另有 2200M/2200N 分支,因此不能把本码理解为所有解析器错误的同义词。

报文

SQLSERIALIZE DOCUMENT 包装器以 ERROR 严重性报告 primary:not an XML document。引用分支没有独立 DETAIL 或 HINT;解析器的具体上下文须以实际运行报文和构建为准。

报文模板

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

主消息 not an XML document

来源:src/backend/utils/adt/xml.c @ REL_18_6

诊断

保留完整上下文和传给 SQLSERIALIZE 的表达式。先确认操作要求的是 DOCUMENT 还是 CONTENT,再检查文档边界、顶层结构和编码。2200L 诊断只绑定上述 DOCUMENT 映射;不要从 CONTENT 请求推断本码,也不要把成员码 2200M/N/S/T 与本码的文档级条件混为一谈。

处理

按解析器指出的位置修正文档边界和结构,同时保留调用方要求“文档”还是“片段”的语义要求。

该分支抛出 ERROR 时,显式事务应先用 ROLLBACK 恢复,或对语句前已建立的保存点执行 ROLLBACK TO SAVEPOINT,再重试;自动提交下只在失败语句结束后重试修正后的动作。事务边界规则见事务与重试指南。

版本

锁定目录从 8.3.0 起记录该条件;固定源码覆盖 PostgreSQL 18.6。

来源

证据

断言

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

  • 2200L is not_an_xml_document in SQLSTATE Class 22.

    核实方式Read fixed definition.

    来源src/backend/utils/errcodes.txt

  • The public SQLSERIALIZE DOCUMENT operation reaches xmltotext_with_options with XMLOPTION_DOCUMENT; when xml parsing fails or records a soft error, the wrapper maps that document conformance failure to 2200L with primary not an XML document.

    核实方式Read xml.c XML option mapping.

    不覆盖The wrapper returns binary-compatible input for non-DOCUMENT/no-indent before this check, so this evidence does not generalize the 2200L mapping to CONTENT; it is distinct from the 2200M invalid-document branch in xml_parse and from content/subconstruct errors.

    来源src/backend/utils/adt/xml.c

  • The locked catalogue records 2200L from 8.3.0 without proving an exact implementation introduction date.

    核实方式Use catalogue boundary.

    来源src/backend/utils/errcodes.txt

同类错误代码

Class 22 数据异常 下的其他成员。