PostgreSQL 服务器发出的所有消息都赋予了五个字符 的错误代码,这些代码遵循 SQL 的 "SQLSTATE" 代码的习惯。需要知道发生 了什么错误条件的应用通常应该测试错误代码,而不是查看文本错误信息。这些错误 代码轻易不会随着 PostgreSQL 的版本更新而修改, 并且一般也不会随着错误信息的本地化而发生修改。
根据标准,错误代码的头两个字符表示错误类别,而后三个字符表示在该 类别内特定的条件。因此,那些不能识别特定错误代码的应用仍然可以从 错误类别中推断要做什么。
Table A-1 里面列出了 PostgreSQL 7.4 定义的所有错误代码。(有些实际上目前并没有使用,但是 SQL 标准定义了。) 错误类别也列出在此。对于每个错误类别都有个"标准"的错误代码, 它的最后三个字符是 000。这个代码只用于那些落在该类别内, 但是没有赋予任何更准确的代码的错误条件
Table A-1. PostgreSQL 错误代码
错误代码 | 含义 |
---|---|
00 类 | 成功完成 |
00000 | 成功完成 |
01 类 | 警告 |
01000 | 警告 |
0100C | 警告,返回了动态结果 |
01008 | 警告,隐含补齐了零比特位 |
01003 | 警告,在集合函数里消除了空值 |
01004 | 警告,字串数据在右端截断 |
02 类 | 没有数据 --- 按照 SQL99 的要求,这也是警告类 |
02000 | 没有数据 |
02001 | 返回了没有附加动态结果集 |
03 类 | SQL 语句尚未结束 |
03000 | SQL 语句尚未结束 |
08 类 | 连接例外 |
08000 | 连接例外 |
08003 | 连接不存在 |
08006 | 连接失败 |
08001 | SQL 客户端不能建立 SQL 连接 |
08004 | SQL 服务器拒绝建立 SQL 连接 |
08007 | 未知的事务分辨率 |
08P01 | 违反协议 |
09 类 | 触发器动作列外 |
09000 | 触发的动作例外 |
0A 类 | 不支持特性 |
0A000 | 不支持此特性 |
0B 类 | 非法事务初始化 |
0B000 | 非法事务初始化 |
0F 类 | 指示器例外 |
0F000 | 指示器例外 |
0F001 | 非法的声明 |
0L 类 | 非法赋权人 |
0L000 | 非法赋权人 |
0LP01 | 非法赋权操作 |
0P 类 | 非法角色声明 |
0P000 | 非法角色声明 |
21 类 | 势违反 |
21000 | 势违反 |
22 类 | 数据例外 |
22000 | 数据例外 |
2202E | 数组元素错误 |
22021 | 字符不在准备好的范围内 |
22008 | 日期时间字段溢出 |
22012 | 被零除 |
22005 | 赋值中出错 |
2200B | 逃逸字符冲突 |
22022 | 指示器溢出 |
22015 | 内部字段溢出 |
22018 | 类型转换时非法的字符值 |
22007 | 非法日期时间格式 |
22019 | 非法的逃逸字符 |
2200D | 非法的逃逸字节 |
22025 | 非法逃逸序列 |
22010 | 非法指示器参数值 |
22020 | 非法限制值 |
22023 | 非法参数值 |
2201B | 非法正则表达式 |
22009 | 非法时区显示值 |
2200C | 非法使用逃逸字符 |
2200G | 最相关类型不匹配 |
22004 | 不允许 NULL 值 |
22002 | NULL 只不能做指示器参数 |
22003 | 数字值超出范围 |
22026 | 字串数据长度不匹配 |
22001 | 字串数据右边被截断 |
22011 | 抽取子字串错误 |
22027 | 截断错误 |
22024 | 未结束的 C 字串 |
2200F | 零长度的字符串 |
22P01 | 浮点例外 |
22P02 | 非法文本表现形式 |
22P03 | 非法二进制表现形式 |
22P04 | 错误的 COPY 格式 |
22P05 | 不可翻译字符 |
23 类 | 违反完整性约束 |
23000 | 违反完整性约束 |
23001 | 违反限制 |
23502 | 违反非空 |
23503 | 违反外键约束 |
23505 | 违反唯一约束 |
23514 | 违反检查 |
24 类 | 非法游标状态 |
24000 | 非法游标状态 |
25 类 | 非法事务状态 |
25000 | 非法事务状态 |
25001 | 活跃的 SQL 状态 |
25002 | 分支事务已经激活 |
25008 | 持有的游标要求同样的隔离级别 |
25003 | 对分支事务的不恰当的访问方式 |
25004 | 对分支事务的不恰当的隔离级别 |
25005 | 分支事务没有活跃的 SQL 事务 |
25006 | 只读的 SQL 事务 |
25007 | 不支持混和的模式和数据语句 |
25P01 | 没有活跃的 SQL 事务 |
25P02 | 在失败的 SQL 事务中 |
26 类 | 非法 SQL 语句名 |
26000 | 非法 SQL 语句名 |
27 类 | 违反触发的数据改变 |
27000 | 违反触发的数据改变 |
28 类 | 非法授权声明 |
28000 | 非法授权声明 |
2B 类 | 依然存在依赖的优先级描述符 |
2B000 | 依然存在依赖的优先级描述符 |
2BP01 | 依赖性对象仍然存在 |
2D 类 | 非法的事务终止 |
2D000 | 非法的事务终止 |
2F 类 | SQL 过程例外 |
2F000 | SQL 过程例外 |
2F005 | 执行的函数没有返回语句 |
2F002 | 不允许修改 SQL 数据 |
2F003 | 企图使用禁止的 SQL 语句 |
2F004 | 不允许读取 SQL 数据 |
34 类 | 非法游标名 |
34000 | 非法游标名 |
38 类 | 外部过程例外 |
38000 | 外部过程例外 |
38001 | 不允许包含的 SQL |
38002 | 不允许修改 SQL 数据 |
38003 | 企图使用禁止的 SQL 语句 |
38004 | 不允许读取 SQL 数据 |
39 类 | 外部过程调用例外 |
39000 | 外部过程调用例外 |
39001 | 返回了非法的 SQLSTATE |
39004 | 不允许空值 |
39P01 | 违反触发器协议 |
39P02 | 违反SRF协议 |
3D 类 | 非法数据库名 |
3D000 | 非法数据库名 |
3F 类 | 非法模式名 |
3F000 | 非法模式名 |
40 类 | 事务回滚 |
40000 | 事务回滚 |
40002 | 违反完整性约束 |
40001 | 串行化失败 |
40003 | 不知道语句是否结束 |
40P01 | 侦测到死锁 |
42 类 | 语法错误或者违反访问规则 |
42000 | 语法错误或者违反访问规则 |
42601 | 语法错误 |
42501 | 权限不够 |
42846 | 无法进行类型转换 |
42803 | 分组错误 |
42830 | 非法的外键 |
42602 | 非法名字 |
42622 | 名字太长 |
42939 | 保留名字 |
42804 | 数据类型不匹配 |
42P18 | 未决的数据类型 |
42809 | 错误的对象类型 |
42703 | 未定义的字段 |
42883 | 未定义的函数 |
42P01 | 未定义的表 |
42P02 | 未定义的参数 |
42704 | 未定义对象 |
42701 | 重复的字段 |
42P03 | 重复的游标 |
42P04 | 重复的数据库 |
42723 | 重复的函数 |
42P05 | 重复的语句 |
42P06 | 重复的模式 |
42P07 | 重复的表 |
42712 | 重复的别名 |
42710 | 重复的对象 |
42702 | 模糊的字段 |
42725 | 模糊的函数 |
42P08 | 模糊的参数 |
42P09 | 模糊的别名 |
42P10 | 非法字段引用 |
42611 | 非法字段定义 |
42P11 | 非法游标定义 |
42P12 | 非法的数据库定义 |
42P13 | 非法函数定义 |
42P14 | 非法语句定义 |
42P15 | 非法模式定义 |
42P16 | 非法表定义 |
42P17 | 非法对象定义 |
44 类 | 违反 WITH CHECK 选项 |
44000 | 违反 WITH CHECK 选项 |
53 类 | 资源不够 |
53000 | 资源不够 |
53100 | 磁盘满 |
53200 | 内存耗尽 |
53300 | 太多连接 |
54 类 | 超过程序限制 |
54000 | 超过程序限制 |
54001 | 语句太复杂 |
54011 | 太多字段 |
54023 | 参数太多 |
55 类 | 对象不在预先要求的状态 |
55000 | 对象不在预先要求的状态 |
55006 | 对象在使用中 |
55P02 | 无法修改运行时参数 |
57 类 | 操作者干涉 |
57000 | 操作者干涉 |
57014 | 查询被取消 |
57P01 | 管理员关机 |
57P02 | 崩溃关机 |
57P03 | 现在无法连接 |
58 类 | 系统错误( PostgreSQL 自己内部的错误) |
58030 | IO 错误 |
58P01 | 未定义的文件 |
58P02 | 重复的文件 |
F0 类 | 配置文件错误 |
F0000 | 配置文件错误 |
F0001 | 锁文件存在 |
XX 类 | 内部错误 |
XX000 | 内部错误 |
XX001 | 数据崩溃 |
XX002 | 索引崩溃 |