# 2200S — invalid_xml_comment

> PostgreSQL SQLSTATE 2200S 的来源与诊断参考。
---

# 2200S

## 速览 {#at-a-glance}
XML 注释无效。PostgreSQL 18.6 的 `xmlcomment` 路径在注释文本含有被禁止的 `--` 序列或以 `-` 结尾时报告 `invalid XML comment`；周围源码检查的是注释专属的 XML 语法，而不是一般文档失败。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `2200S` |
| 条件名 | `invalid_xml_comment` |
| 状态 | `有效` |
| 已知存在于 | `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_COMMENT` |
| 别名 | `—` |

<!-- source facts: data/errcodes/2200S.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}
本成员专用于 XML 注释语法，不涵盖所有 XML 文档失败。在 `USE_LIBXML` 下，`xmlcomment` 在构造 `<!--...-->` 之前扫描输入；任意位置的双连字符或末尾连字符都会被拒绝。

## 报文 {#messages}

该 guard 以 `ERROR` 严重性报告 primary：`invalid XML comment`。引用分支没有独立 DETAIL 或 HINT。未启用 `USE_LIBXML` 时函数走独立的 XML 支持路径（`0A000`），因此源码存在本身不能证明所有服务器构建都提供此功能。

## 诊断 {#diagnosis}
检查报文指出的注释文本和 XML 上下文。XML 注释不能包含被禁止的双连字符形式，也不能以连字符结尾；在保留周围标记的前提下修正该注释。若解析器实际指出处理指令或非文档内容，应按报出的 2200T 或 2200L/N 处理。

## 处理 {#response}
在保留周围 XML 的前提下修正注释文本，依据注释专属报文处理，而不是套用一般文档修复。

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

## 版本 {#versions}
锁定目录从 8.3.0 起记录该条件；固定源码覆盖 PostgreSQL 18.6。

## 相关 {#related}
[`2200L`](../2200l/)、[`2200T`](../2200t/)

## 来源 {#sources}
固定源码：[`src/backend/utils/adt/xml.c#L490-523`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/xml.c#L490-L523)。结构化[证据记录](../../data/evidence/2200s.json)保留完整注释 guard、报文和范围边界。违规注释是运行时输入，函数编译受 `USE_LIBXML` 控制；本页未运行自然 XML 案例。
