多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 48.6\. 错误和通知消息字段 本节描述那些可能出现在 ErrorResponse 和 NoticeResponse 消息里的字段。 每个字段类型有一个单字节标识记号。请注意,任意给定的字段类型在每条消息里都应该最多出现一次。 `S` 严重性:该字段的内容是 `ERROR`, `FATAL`, `PANIC`(在一个错误消息里), `WARNING`, `NOTICE`, `DEBUG`, `INFO`, `LOG`(在一条通知消息里)之一,或者是这些的某种本地化翻译的字符串。总是会出现。 `C` 代码:错误的 SQLSTATE 代码(参阅[Appendix A](#calibre_link-120))。不能本地化。总是出现。 `M` 消息:人类可读的错误消息的主体。这些消息应该准确并且简洁(通常是一行)。总是出现。 `D` 细节:一个可选的从属错误消息,承载有关问题的更多错误消息。可以是多行。 `H` 提示:一个可选的有关如何处理问题的建议。它和细节不同的地方是它提出了建议(可能并不合适)而不仅仅是事实。可以是多行。 `P` 位置:这个字段值是一个十进制 ASCII 整数,表示一个错误游标的位置,它是一个指向原始查询字符串的索引。 第一个字符的索引是 1 ,位置是以字符计算而非字节计算的。 `p` 内部位置:这个域和`P`域定义相同,但是它用于游标的位置指向一个内部生成的命令,而不是用于客户端提交的命令。这个字段出现的时候,总是会出现`q`字段。 `q` 内部查询:失败的内部生成的命令的文本。比如,它可能是一个 PL/pgSQL 函数发出的 SQL 查询。 `W` 哪里:一个指示错误发生的环境的指示器。目前,这个参数包含一个活跃的过程语言函数的调用堆栈的追溯和内部生成的查询。这个追溯每条记录一行,最新的在最上面。 `s` 模式名:如果错误和一个特定的数据库对象相关,则是包含该对象的模式的名字。 `t` 表名:如果错误和一个特定的表相关,则是这个表的名字。 (表的模式名参考模式名字段) `c` 列名:如果错误和一个特定的列相关,则是这个列的名字。 (特定的表参考模式名和表名字段) `d` 数据类型名:如果错误和一个特定的数据类型相关,则是这个数据类型的名字。 (数据类型的模式名参考模式名字段) `n` 约束名:如果错误和一个特定的约束相关,则是这个约束的名字。 相关的表或者域参考上面列出的字段。 (因为这个目的,索引被当作约束对待,即使它们不是通过约束语法创建的) `F` 文件:报告错误的源代码位置的文件名。 `L` 行:报告错误的源代码位置的行号。 `R` 过程:报告错误的源代码过程名。 > **Note:** 模式名、表名、列名、数据类型名以及约束名相关的字段只是提供给有限的错误类型。 参考[Appendix A](#calibre_link-120)。前端不应该假设只要出现了其中一个字段就一定会有其它字段。 核心的错误源遵守上面提到的相互关系,但是用户自定义函数可能以不同的方式使用这些字段。 同样,客户端不应该假设这些字段指示了在当前数据库中同时存在的对象。 客户端负责对显示信息进行格式化输出以符合需要;特别是它应该根据需要断开长的行。 在错误消息字段里出现的换行符应该当作一个分段的符号,而不是换行。