跳转到主要内容

2200M — invalid_xml_document

PostgreSQL SQLSTATE 2200M 的来源与诊断参考。

2200M

速览

该目录成员表示 XML 文档无效。PostgreSQL 18.6 的核心 xml_parse 文档分支会报告 invalid XML document,而 contrib/xml2 的 XSLT 路径在源文档或样式表解析失败时也使用同一 SQLSTATE。这些发出点不同于 2200L 的文档选项包装器。

字段
SQLSTATE 2200M
条件名 invalid_xml_document
状态 有效
已知存在于 8.3.0
锁定快照 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_INVALID_XML_DOCUMENT
别名

含义

本成员来自具体的文档解析 guard,表示 XML 文档无效。在核心 xml_parse 中,xmlCtxtReadDoc 解析失败且原始 XML 选项为 DOCUMENT 时报告 2200M;原始选项为 CONTENT 时,同一解析失败报告 2200N。独立的 contrib/xml2 函数在把输入文档或样式表作为 XML 解析失败时使用 2200M。核心 xml_errsave 会把这些结果交给 errsave:传入 ErrorSaveContext 时保存错误并正常返回,普通上下文则抛出错误;这条软错误路径不同于 contrib/xml2 直接抛出 ERROR 的分支。

报文

核心分支以 ERROR 报告 primary:invalid XML documentcontrib/xml2 分支以 ERROR 报告 primary:error parsing XML documenterror parsing stylesheet as XML document。引用分支没有固定 DETAIL 或 HINT 模板;libxml2 上下文可能动态附加。不要把这些报文替换成 2200L 的 not an XML document

诊断

结合实际 SQLSTATE、message、detail 和 context,区分文档级失败与内容(2200N)、注释(2200S)或处理指令(2200T)错误。检查产生报文的是核心 xml_parse 还是 contrib/xml2,再修正报文指向的文档或样式表。本页已确认这些源码发出路径,但未运行自然案例。

处理

根据实际报文和解析器上下文修正无效文档;未确认实际 SQLSTATE 前不要套用 2200L 的处理。

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

版本

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

2200L2200N

来源

核心固定源码:src/backend/utils/adt/xml.c#L1780-1862。独立的 contrib/xml2/xslt_proc.c#L84-100 路径解析 XML 文档和样式表。共享的 xml_errsave/errsave helper定义软错误与普通抛错的行为。结构化证据记录保留两个发出点、报文角色和范围边界。核心路径依赖 USE_LIBXML;本页未运行自然 XML 案例。