PostgreSQL在客户端出错时,服务器端返回了丰富的错误信息,当然最终返回到上层的只是一部分。参考Pg的文档,出现在 ErrorResponse 和 NoticeResponse 消息里由多个字段构成。 每个字段类型有一个单字节标识记号。请注意,任意给定的字段类型在每条消息里都应该最多出现一次。
S
严重性:该字段的内容是 ERROR, FATAL, PANIC(在一个错误消息里), WARNING, NOTICE, DEBUG, INFO, LOG(在一条通知消息里)之一,或者是这些的某种本地化翻译的字符串。总是会出现。
C
代码:错误的 SQLSTATE 代码(参阅Appendix A)。不能本地化。总是出现。
M
消息:人类可读的错误消息的主体。这些消息应该准确并且简洁(通常是一行)。总是出现。
D
细节:一个可选的从属错误消息,承载有关问题的更多错误消息。可以是多行。
H
提示:一个可选的有关如何处理问题的建议。它和细节不同的地方是它提出了建议(可能并不合适)而不仅仅是事实。可以是多行。
P
位置:这个字段值是一个十进制 ASCII 整数,表示一个错误游标的位置,它是一个指向原始查询字符串的索引。 第一个字符的索引是 1 ,位置是以字符计算而非字节计算的。
p
内部位置:这个域和P域定义相同,但是它用于游标的位置指向一个内部生成的命令,而不是用于客户端提交的命令。这个字段出现的时候,总是会出现q字段。
q
内部查询:失败的内部生成的命令的文本。比如,它可能是一个 PL/pgSQL 函数发出的 SQL 查询。
W
哪里:一个指示错误发生的环境的指示器。目前,这个参数包含一个活跃的过程语言函数的调用堆栈的追溯和内部生成的查询。这个追溯每条记录一行,最新的在最上面。
s
模式名:如果错误和一个特定的数据库对象相关,则是包含该对象的模式的名字。
t
表名:如果错误和一个特定的表相关,则是这个表的名字。 (表的模式名参考模式名字段)
c
列名:如果错误和一个特定的列相关,则是这个列的名字。 (特定的表参考模式名和表名字段)
d
数据类型名:如果错误和一个特定的数据类型相关,则是这个数据类型的名字。 (数据类型的模式名参考模式名字段)
n
约束名:如果错误和一个特定的约束相关,则是这个约束的名字。 相关的表或者域参考上面列出的字段。 (因为这个目的,索引被当作约束对待,即使它们不是通过约束语法创建的)
F
文件:报告错误的源代码位置的文件名。
L
行:报告错误的源代码位置的行号。
R
过程:报告错误的源代码过程名。
QDAC的LastErrorMsg会报告R/M/D/H三种类型的字段组合,其它的会被忽略。