# 附录 A. PostgreSQL 错误代码
PostgreSQL 服务器发出的所有消息都分配有五个字符的错误代码,这些错误代码遵循 SQL 标准的“SQLSTATE”代码约定。需要知道发生了哪种错误情况的应用程序通常应该测试错误代码,而不是查看文本错误消息。错误代码不太可能在 PostgreSQL 版本之间更改,并且也不会由于错误消息的本地化而发生更改。请注意,PostgreSQL 产生的一些但不是全部的错误代码是由 SQL 标准定义的;标准未定义的一些附加错误代码已被发明或从其他数据库借用。
根据标准,错误代码的前两个字符表示一类错误,而后三个字符表示该类中的特定条件。因此,无法识别特定错误代码的应用程序可能仍然能够从错误类中推断出要做什么。
表 A.1列出了 PostgreSQL 14.2 中定义的所有错误代码。(有些目前没有实际使用,但由 SQL 标准定义。)还显示了错误类。对于每个错误类别,都有一个包含最后三个字符的“标准”错误代码000
.此代码仅用于属于该类但没有分配任何更具体代码的错误条件。
“条件名称”列中显示的符号是在 PL/pgSQL 中使用的条件名称。条件名称可以大写或小写。(请注意,PL/pgSQL 不识别警告,而不是错误,条件名称;它们是类 00、01 和 02.)对于某些类型的错误,服务器会报告与错误相关的数据库对象(表、表列、数据类型或约束)的名称;
例如,导致unique_violation错误。
此类名称在错误报告消息的单独字段中提供,因此应用程序无需尝试从消息的可能本地化的人类可读文本中提取它们。从 PostgreSQL 9.3 开始,此功能的完全覆盖仅存在于 SQLSTATE 类 23 中的错误(违反完整性约束),但将来可能会扩展。表 A.1.
PostgreSQL 错误代码
错误代码 | 条件名称 |
---|---|
00 级——成功完成 | |
00000 | 成功完成 |
01类——警告 | |
01000 | 警告 |
0100C | dynamic_result_sets_returned |
01008 | 隐式零位填充 |
01003 | null_value_eliminated_in_set_function |
01007 | privilege_not_granted |
01006 | privilege_not_revoked |
01004 | string_data_right_truncation |
01P01 | deprecated_feature |
02 类 — 无数据(这也是 SQL 标准的警告类) | |
02000 | 没有数据 |
02001 | no_additional_dynamic_result_sets_returned |
第 03 课——SQL 语句尚未完成 | |
03000 | sql_statement_not_yet_complete |
08 类——连接异常 | |
08000 | 连接异常 |
08003 | connection_does_not_exist |
08006 | 连接失败 |
08001 | sqlclient_unable_to_establish_sqlconnection |
08004 | sqlserver_rejected_establishment_of_sqlconnection |
08007 | transaction_resolution_unknown |
08P01 | 协议违反 |
第 09 课——触发的动作异常 | |
09000 | 触发动作异常 |
0A 类 — 不支持的功能 | |
0A000 | feature_not_supported |
0B 类 - 无效的事务启动 | |
0B000 | invalid_transaction_initiation |
0F 类 — 定位器异常 | |
0F000 | 定位器异常 |
0F001 | 无效定位器规范 |
0L 类 — 无效的授予人 | |
0L000 | 无效授予者 |
0LP01 | 无效授权操作 |
0P 类 - 无效的角色规范 | |
0P000 | 无效角色规范 |
0Z 类 — 诊断异常 | |
0Z000 | 诊断异常 |
0Z002 | 堆叠诊断访问无活动处理程序 |
第 20 类 — 未找到案例 | |
20000 | case_not_found |
第 21 类 — 违反基数 | |
21000 | cardinality_violation |
第 22 类 — 数据异常 | |
22000 | 数据异常 |
2202E | 数组下标错误 |
22021 | character_not_in_repertoire |
22008 | datetime_field_overflow |
22012 | 被零除 |
22005 | error_in_assignment |
2200B | 转义字符冲突 |
22022 | 指标溢出 |
22015 | 间隔字段溢出 |
2201E | invalid_argument_for_logarithm |
22014 | invalid_argument_for_ntile_function |
22016 | invalid_argument_for_nth_value_function |
2201F | invalid_argument_for_power_function |
2201G | invalid_argument_for_width_bucket_function |
22018 | invalid_character_value_for_cast |
22007 | 无效日期时间格式 |
22019 | 无效的转义字符 |
2200D | invalid_escape_octet |
22025 | invalid_escape_sequence |
22P06 | nonstandard_use_of_escape_character |
22010 | 无效指标参数值 |
22023 | 无效参数值 |
22013 | invalid_preceding_or_following_size |
2201B | 无效的正则表达式 |
2201W | invalid_row_count_in_limit_clause |
2201X | invalid_row_count_in_result_offset_clause |
2202H | invalid_tablesample_argument |
2202G | invalid_tablesample_repeat |
22009 | invalid_time_zone_displacement_value |
2200℃ | invalid_use_of_escape_character |
2200G | most_specific_type_mismatch |
22004 | null_value_not_allowed |
22002 | null_value_no_indicator_parameter |
22003 | numeric_value_out_of_range |
2200H | sequence_generator_limit_exceeded |
22026 | string_data_length_mismatch |
22001 | string_data_right_truncation |
22011 | substring_error |
22027 | 修剪错误 |
22024 | unterminated_c_string |
2200F | zero_length_character_string |
22P01 | 浮点异常 |
22P02 | invalid_text_representation |
22P03 | 无效二进制表示 |
22P04 | bad_copy_file_format |
22P05 | 不可翻译的字符 |
2200L | not_an_xml_document |
2200M | invalid_xml_document |
2200N | invalid_xml_content |
2200S | invalid_xml_comment |
2200T | invalid_xml_processing_instruction |
22030 | duplicate_json_object_key_value |
22031 | invalid_argument_for_sql_json_datetime_function |
22032 | 无效的json文本 |
22033 | invalid_sql_json_subscript |
22034 | more_than_one_sql_json_item |
22035 | no_sql_json_item |
22036 | non_numeric_sql_json_item |
22037 | non_unique_keys_in_a_json_object |
22038 | singleton_sql_json_item_required |
22039 | sql_json_array_not_found |
2203A | sql_json_member_not_found |
2203B | sql_json_number_not_found |
2203C | sql_json_object_not_found |
2203D | too_many_json_array_elements |
2203E | too_many_json_object_members |
2203F | sql_json_scalar_required |
第 23 类——违反完整性约束 | |
23000 | 完整性约束违反 |
23001 | 限制违反 |
23502 | not_null_violation |
23503 | foreign_key_violation |
23505 | unique_violation |
23514 | check_violation |
23P01 | 排除违反 |
第 24 类 — 无效的光标状态 | |
24000 | 无效光标状态 |
第 25 类——无效的事务状态 | |
25000 | 无效交易状态 |
25001 | active_sql_transaction |
25002 | branch_transaction_already_active |
25008 | hold_cursor_requires_same_isolation_level |
25003 | 不适当的_access_mode_for_branch_transaction |
25004 | inappropriate_isolation_level_for_branch_transaction |
25005 | no_active_sql_transaction_for_branch_transaction |
25006 | read_only_sql_transaction |
25007 | schema_and_data_statement_mixing_not_supported |
25P01 | no_active_sql_transaction |
25P02 | in_failed_sql_transaction |
25P03 | idle_in_transaction_session_timeout |
第 26 类——无效的 SQL 语句名称 | |
26000 | invalid_sql_statement_name |
第 27 类 — 触发的数据更改违规 | |
27000 | 触发数据更改违规 |
第 28 类 — 无效的授权规范 | |
28000 | 无效授权规范 |
28P01 | 无效的密码 |
2B 类 — 依赖特权描述符仍然存在 | |
2B000 | dependent_privilege_descriptors_still_exist |
2BP01 | 依赖对象仍然存在 |
2D 类 - 无效的交易终止 | |
2D000 | 无效交易终止 |
2F 类 — SQL 例程异常 | |
2F000 | sql_routine_exception |
2F005 | function_executed_no_return_statement |
2F002 | 修改_sql_data_not_permitted |
2F003 | 禁止的_sql_statement_attempted |
2F004 | reading_sql_data_not_permitted |
第 34 类 - 无效的游标名称 | |
34000 | invalid_cursor_name |
第 38 类 — 外部例程异常 | |
38000 | external_routine_exception |
38001 | 包含_sql_not_permitted |
38002 | 修改_sql_data_not_permitted |
38003 | 禁止的_sql_statement_attempted |
38004 | reading_sql_data_not_permitted |
第 39 类 — 外部例程调用异常 | |
39000 | external_routine_invocation_exception |
39001 | invalid_sqlstate_returned |
39004 | null_value_not_allowed |
39P01 | trigger_protocol_violated |
39P02 | srf_protocol_violated |
39P03 | event_trigger_protocol_violated |
3B 类 — 保存点异常 | |
3B000 | 保存点异常 |
3B001 | 无效保存点规范 |
3D 类 - 目录名称无效 | |
3D000 | 无效目录名称 |
3F 类 - 无效的模式名称 | |
3F000 | invalid_schema_name |
第 40 类 — 事务回滚 | |
40000 | 事务回滚 |
40002 | transaction_integrity_constraint_violation |
40001 | 序列化失败 |
40003 | statement_completion_unknown |
40P01 | 检测到死锁 |
第 42 类 — 语法错误或访问规则违规 | |
42000 | syntax_error_or_access_rule_violation |
42601 | 语法错误 |
42501 | 特权不足 |
42846 | 不能强制 |
42803 | 分组错误 |
42P20 | 窗口错误 |
42P19 | 无效递归 |
42830 | invalid_foreign_key |
42602 | 无效名称 |
42622 | name_too_long |
42939 | 保留名称 |
42804 | 数据类型不匹配 |
42P18 | 不确定的数据类型 |
42P21 | collation_mismatch |
42P22 | indeterminate_collation |
42809 | 错误对象类型 |
428C9 | 生成_总是 |
42703 | 未定义列 |
42883 | 未定义函数 |
42P01 | 未定义表 |
42P02 | 未定义参数 |
42704 | 未定义对象 |
42701 | 重复列 |
42P03 | 重复光标 |
42P04 | 重复数据库 |
42723 | 重复函数 |
42P05 | 重复准备声明 |
42P06 | 重复模式 |
42P07 | 重复表 |
42712 | 重复别名 |
42710 | 重复对象 |
42702 | 模棱两可的列 |
42725 | ambiguous_function |
42P08 | 模糊参数 |
42P09 | 模棱两可的别名 |
42P10 | 无效列引用 |
42611 | 无效列定义 |
42P11 | 无效光标定义 |
42P12 | 无效数据库定义 |
42P13 | 无效功能定义 |
42P14 | invalid_prepared_statement_definition |
42P15 | 无效模式定义 |
42P16 | 无效表定义 |
42P17 | 无效对象定义 |
第 44 类 — WITH CHECK OPTION 违规 | |
44000 | with_check_option_violation |
第 53 类 — 资源不足 | |
53000 | 资源不足 |
53100 | 磁盘已满 |
53200 | 内存不足 |
53300 | 太多联系 |
53400 | configuration_limit_exceeded |
第 54 类 — 超出程序限制 | |
54000 | program_limit_exceeded |
54001 | statement_too_complex |
54011 | 太多列 |
54023 | 争论太多 |
第 55 类 — 对象未处于先决条件状态 | |
55000 | object_not_in_prerequisite_state |
55006 | object_in_use |
55P02 | cant_change_runtime_param |
55P03 | lock_not_available |
55P04 | unsafe_new_enum_value_usage |
第 57 类 — 操作员干预 | |
57000 | 操作员干预 |
57014 | 查询取消 |
57P01 | admin_shutdown |
57P02 | crash_shutdown |
57P03 | cannot_connect_now |
57P04 | database_dropped |
57P05 | idle_session_timeout |
第 58 类——系统错误(PostgreSQL 自身外部的错误) | |
58000 | 系统错误 |
58030 | io_error |
58P01 | 未定义文件 |
58P02 | 重复文件 |
第 72 类 — 快照失败 | |
72000 | 快照太旧 |
F0 类 - 配置文件错误 | |
F0000 | config_file_error |
F0001 | lock_file_exists |
HV 类 - 外部数据包装错误 (SQL/MED) | |
HV000 | fdw_error |
HV005 | fdw_column_name_not_found |
HV002 | fdw_dynamic_parameter_value_needed |
HV010 | fdw_function_sequence_error |
HV021 | fdw_inconsistent_descriptor_information |
HV024 | fdw_invalid_attribute_value |
HV007 | fdw_invalid_column_name |
HV008 | fdw_invalid_column_number |
HV004 | fdw_invalid_data_type |
HV006 | fdw_invalid_data_type_descriptors |
HV091 | fdw_invalid_descriptor_field_identifier |
HV00B | fdw_invalid_handle |
HV00C | fdw_invalid_option_index |
HV00D | fdw_invalid_option_name |
HV090 | fdw_invalid_string_length_or_buffer_length |
HV00A | fdw_invalid_string_format |
HV009 | fdw_invalid_use_of_null_pointer |
HV014 | fdw_too_many_handles |
HV001 | fdw_out_of_memory |
HV00P | fdw_no_schemas |
HV00J | fdw_option_name_not_found |
HV00K | fdw_reply_handle |
HV00Q | fdw_schema_not_found |
HV00R | fdw_table_not_found |
HV00L | fdw_unable_to_create_execution |
HV00M | fdw_unable_to_create_reply |
HV00N | fdw_unable_to_establish_connection |
P0 类——PL/pgSQL 错误 | |
P0000 | plpgsql_error |
P0001 | raise_exception |
P0002 | 没有找到数据 |
P0003 | too_many_rows |
P0004 | 断言失败 |
XX 类 — 内部错误 | |
XX000 | 内部错误 |
XX001 | 数据损坏 |
XX002 | index_corrupted |