Appendix A. PostgreSQL 错误码

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 语句尚未结束
03000SQL 语句尚未结束
08 类连接例外
08000连接例外
08003连接不存在
08006连接失败
08001SQL 客户端不能建立 SQL 连接
08004SQL 服务器拒绝建立 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 值
22002NULL 只不能做指示器参数
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 过程例外
2F000SQL 过程例外
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 自己内部的错误)
58030IO 错误
58P01未定义的文件
58P02重复的文件
F0 类配置文件错误
F0000配置文件错误
F0001锁文件存在
XX 类内部错误
XX000内部错误
XX001数据崩溃
XX002索引崩溃