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 | 索引崩溃 |