本节描述可以出现在 ErrorResponse 和 NoticeResponse 消息中的字段。 每种字段类型都有一个单字节的标识记号。 注意,任何给定的字段类型在每条消息中至多出现一次。
S
严重级别(Severity):字段内容是
ERROR、FATAL 或
PANIC(在错误消息中),或
WARNING、NOTICE、
DEBUG、INFO 或
LOG(在通知消息中),
或其中之一的本地化翻译。总是存在。
V
严重级别(Severity):字段内容是
ERROR、FATAL 或
PANIC(在错误消息中),或
WARNING、NOTICE、
DEBUG、INFO 或
LOG(在通知消息中)。
这与 S 字段完全相同,
区别是其内容从不做本地化。它只出现在由
PostgreSQL 9.6
及之后版本生成的消息中。
C代码(Code):该错误的 SQLSTATE 代码(见 Appendix A)。不可本地化。总是存在。
M消息(Message):主要的人类可读错误消息。 它应当准确但简明(通常为一行)。总是存在。
D细节(Detail):一个可选的辅助错误消息, 携带关于该问题的更多细节。可能长达多行。
H提示(Hint):一个关于如何处理该问题的可选建议。 它与细节(Detail)的区别在于它提供的是建议 (可能并不合适)而非确定的事实。 可能长达多行。
P位置(Position):字段值是一个十进制 ASCII 整数, 指示一个错误游标位置,即原始查询字符串中的一个索引。 第一个字符的索引为 1,位置按字符而不是字节计算。
p
内部位置(Internal position):它的定义与
P 字段相同,
但它用于游标位置指向一个内部生成的命令
而非客户端提交的命令的情况。
当出现该字段时,q 字段也总是会出现。
q内部查询(Internal query):失败的内部生成命令的文本。 例如,这可能是由一个 PL/pgSQL 函数发出的 SQL 查询。
W位置上下文(Where):对错误发生时上下文的指示。 目前这包括活动的过程语言函数和内部生成查询的调用栈回溯。 回溯每行一条记录,最新的在最前面。
s模式名(Schema name):如果该错误与某个特定的数据库对象有关, 则是包含该对象的模式的名称(如果有)。
t表名(Table name):如果该错误与某个特定的表有关, 则是该表的名称。(该表所属的模式名见模式名字段。)
c列名(Column name):如果该错误与某个特定的表列有关, 则是该列的名称。 (标识该表请参照模式名和表名字段。)
d数据类型名(Data type name):如果该错误与某个特定的数据类型有关, 则是该数据类型的名称。 (该数据类型所属的模式名见模式名字段。)
n约束名(Constraint name):如果该错误与某个特定的 约束有关,则是该约束的名称。 相关的表或域请参照上面列出的字段。 (为此目的,索引也被当作约束对待, 即使它们不是用约束语法创建的。)
F文件(File):报告该错误的源代码位置的文件名。
L行(Line):报告该错误的源代码位置的行号。
R例程(Routine):报告该错误的源代码例程的名称。
模式名、表名、列名、数据类型名和约束名字段 只会针对有限的一些错误类型提供; 见 Appendix A。前端不应假设 其中任何一个字段的存在保证了另一个字段也存在。 核心错误来源会遵守上面指出的相互关系, 但用户定义的函数可能会以其他方式使用这些字段。 同样,客户端不应假设这些字段表示的是当前数据库中的现役对象。
客户端负责对显示的信息进行格式化以满足其需要; 特别是,它应当按需断开长行。 出现在错误消息字段中的换行字符应当被当作段落分隔符, 而不是行分隔符。