历史版本。 PostgreSQL 8.0 已结束支持。 请参阅 当前版本手册.
附录 A. PostgreSQL错误代码
PostgreSQL 服务器发出的所有消息都被分配了五字符错误代码,遵循 SQL 标准对 “SQLSTATE” 代码的约定。需要知道发生了哪一种错误条件的应用,通常应测试错误代码,而不是查看错误消息的文本内容。这些错误代码在不同 PostgreSQL 版本之间更不容易发生变化,也不会因错误消息的本地化而改变。请注意,PostgreSQL 产生的错误代码中,只有一部分由 SQL 标准定义;还有一些用于标准未定义情况的附加错误代码,是新设的或从其他数据库借用而来的。
根据标准,错误代码的前两个字符表示错误类别,后三个字符表示该类别中的特定条件。因此,即使应用无法识别某个具体错误代码,仍可能从错误类别推断出应采取的操作。
表 A.1列出了 PostgreSQL 8.0.26 中定义的所有错误代码。(其中有些当前实际上并未使用,不过它们由 SQL 标准定义。)其中也显示了错误类别。对于每个错误类别,都有一个后三个字符为 000 的“标准”错误代码。该代码只用于那些属于该类别但没有分配更具体代码的错误情况。
每个错误代码的
PL/pgSQL 条件名与表中所示的短语相同,只是把空格替换成下划线。例如,代码
22012(DIVISION BY ZERO)的条件名是
DIVISION_BY_ZERO。条件名可以大写或小写。(注意,
PL/pgSQL 不识别警告(而非错误)的条件名;它们是类别 00、01 和 02。)
表 A.1. PostgreSQL错误代码
| 错误代码 | 含义 |
|---|---|
| 类 00 | 成功完成 |
00000 | 成功完成 |
| 类 01 | 警告 |
01000 | 警告 |
0100C | 返回了动态结果集 |
01008 | 隐式零填充 |
01003 | 集合函数中消除了空值 |
01007 | 特权未被授予 |
01006 | 特权未被撤销 |
01004 | STRING DATA RIGHT TRUNCATION |
01P01 | 已弃用的特性 |
| 类 02 | 无数据 — 按 SQL:1999 这也是一个警告类别 |
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 | 时间间隔字段溢出 |
2201E | 对数函数参数无效 |
2201F | 幂函数参数无效 |
2201G | WIDTH_BUCKET 函数参数无效 |
22018 | 强制转换的字符值无效 |
22007 | 无效的日期时间格式 |
22019 | 无效的转义字符 |
2200D | 无效的转义八位字节 |
22025 | 无效的转义序列 |
22010 | 无效的指示器参数值 |
22020 | 无效的限制值 |
22023 | 无效的参数值 |
2201B | 无效的正则表达式 |
22009 | 无效的时区偏移值 |
2200C | 转义字符的无效使用 |
2200G | 最明确类型不匹配 |
22004 | NULL VALUE NOT ALLOWED |
22002 | 空值没有指示器参数 |
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 | 函数未执行 RETURN 语句 |
2F002 | MODIFYING SQL DATA NOT PERMITTED |
2F003 | PROHIBITED SQL STATEMENT ATTEMPTED |
2F004 | READING SQL DATA NOT PERMITTED |
| 类 34 | 无效的游标名称 |
34000 | 无效的游标名称 |
| 类 38 | 外部例程异常 |
38000 | 外部例程异常 |
38001 | 不允许包含 SQL |
38002 | 不允许修改 SQL 数据 |
38003 | 试图执行被禁止的 SQL 语句 |
38004 | 不允许读取 SQL 数据 |
| 类 39 | 外部例程调用异常 |
39000 | 外部例程调用异常 |
39001 | 返回了无效的 SQLSTATE |
39004 | 不允许空值 |
39P01 | 违反触发器协议 |
39P02 | 违反 SRF 协议 |
| 类 3B | 保存点异常 |
3B000 | 保存点异常 |
3B001 | 无效的保存点规约 |
| 类 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 | 无法更改运行时参数 |
55P03 | 锁不可用 |
| 类 57 | 操作员干预 |
57000 | 操作员干预 |
57014 | 查询被取消 |
57P01 | 管理员关闭 |
57P02 | 崩溃关闭 |
57P03 | 现在无法连接 |
| 类 58 | 系统错误(PostgreSQL 自身之外的错误) |
58030 | IO 错误 |
58P01 | 未定义的文件 |
58P02 | 重复的文件 |
| 类 F0 | 配置文件错误 |
F0000 | 配置文件错误 |
F0001 | 锁文件已存在 |
| 类 P0 | PL/pgSQL 错误 |
P0000 | PL/pgSQL 错误 |
P0001 | RAISE 异常 |
| 类 XX | 内部错误 |
XX000 | 内部错误 |
XX001 | 数据损坏 |
XX002 | 索引损坏 |