pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
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 |
索引损坏 |
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。