Коды ошибок QHB
Всем сообщениям, которые выдает сервер QHB, назначены пятисимвольные коды ошибок, соответствующие кодам «SQLSTATE», описанным в стандарте SQL. Приложения, которые должны знать, какое условие ошибки имело место, обычно должны проверять код ошибки, а не обращаться к текстовому сообщению о ней. Коды ошибок, скорее всего, не изменятся от выпуска к выпуску QHB, а кроме того, они не меняются при локализации сообщений об ошибках. Обратите внимание, что не все коды ошибок, которые выдает QHB, определены стандартом SQL; некоторые дополнительные коды ошибок для условий, не описанных стандартом, были добавлены независимо или позаимствованы из других баз данных.
Согласно стандарту, первые два символа кода ошибки обозначают класс ошибок, а последние три символа обозначают определенное условие в этом классе. Благодаря этому, приложение, не знающее значение определенного кода ошибки, все равно может понять, что делать, по классу ошибки.
В Таблице 1 перечислены все коды ошибок, определенные в QHB. (Некоторые из них в настоящее время не используются, хотя и определены в стандарте SQL.) Также показаны классы ошибок. Для каждого класса ошибок имеется «стандартный» код ошибки с последними тремя символами 000. Этот код выдается только для тех условий ошибок, которые относятся к некоторому классу, но не имеют более определенного кода.
Символ, указанный во втором столбце, — имя условия в PL/pgSQL. Имена условий могут записываться в верхнем или нижнем регистре. (Обратите внимание, что PL/pgSQL, в отличие от ошибок, не распознает предупреждения, то есть классы 00, 01 и 02.)
Для некоторых типов ошибок сервер сообщает имя объекта базы данных (таблицу, столбец таблицы, тип данных или ограничение), связанного с ошибкой; например, имя уникального ограничения, вызвавшего ошибку unique_violation. Такие имена передаются в отдельных полях сообщения об ошибке, чтобы приложениям не пришлось извлекать их из возможно локализованного текста сообщения для человека. Пока что полностью охвачены этой особенностью только ошибки класса SQLSTATE 23 (нарушения ограничений целостности), но в будущем, скорее всего, будут охвачены и другие классы.
Таблица 1. Коды ошибок QHB
Код ошибки | Имя условия |
---|---|
Класс 00 — Успешное завершение | |
00000 | successful_completion |
Класс 01 — Предупреждение | |
01000 | warning |
0100C | dynamic_result_sets_returned |
01008 | implicit_zero_bit_padding |
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 | no_data |
02001 | no_additional_dynamic_result_sets_returned |
Класс 03 — Оператор SQL еще не завершен | |
03000 | sql_statement_not_yet_complete |
Класс 08 — Исключение, связанное с подключением | |
08000 | connection_exception |
08003 | connection_does_not_exist |
08006 | connection_failure |
08001 | sqlclient_unable_to_establish_sqlconnection |
08004 | sqlserver_rejected_establishment_of_sqlconnection |
08007 | transaction_resolution_unknown |
08P01 | protocol_violation |
Класс 09 — Исключение с действием триггера | |
09000 | triggered_action_exception |
Класс 0A — Неподдерживаемая функциональность | |
0A000 | feature_not_supported |
Класс 0B — Неверное начало транзакции | |
0B000 | invalid_transaction_initiation |
Класс 0F — Исключение с указателем на данные | |
0F000 | locator_exception |
0F001 | invalid_locator_specification |
Класс 0L — Неверный праводатель | |
0L000 | invalid_grantor |
0LP01 | invalid_grant_operation |
Класс 0P — Неверное указание роли | |
0P000 | invalid_role_specification |
Класс 0Z — Исключение диагностики | |
0Z000 | diagnostics_exception |
0Z002 | stacked_diagnostics_accessed_without_active_handler |
Класс 20 — Case не найден | |
20000 | case_not_found |
Класс 21 — Нарушение количества | |
21000 | cardinality_violation |
Класс 22 — Исключение в данных | |
22000 | data_exception |
2202E | array_subscript_error |
22021 | character_not_in_repertoire |
22008 | datetime_field_overflow |
22012 | division_by_zero |
22005 | error_in_assignment |
2200B | escape_character_conflict |
22022 | indicator_overflow |
22015 | interval_field_overflow |
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 | invalid_datetime_format |
22019 | invalid_escape_character |
2200D | invalid_escape_octet |
22025 | invalid_escape_sequence |
22P06 | nonstandard_use_of_escape_character |
22010 | invalid_indicator_parameter_value |
22023 | invalid_parameter_value |
22013 | invalid_preceding_or_following_size |
2201B | invalid_regular_expression |
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 |
2200C | 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 | trim_error |
22024 | unterminated_c_string |
2200F | zero_length_character_string |
22P01 | floating_point_exception |
22P02 | invalid_text_representation |
22P03 | invalid_binary_representation |
22P04 | bad_copy_file_format |
22P05 | untranslatable_character |
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 |
22032 | invalid_json_text |
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 | integrity_constraint_violation |
23001 | restrict_violation |
23502 | not_null_violation |
23503 | foreign_key_violation |
23505 | unique_violation |
23514 | check_violation |
23P01 | exclusion_violation |
Класс 24 — Неверное состояние курсора | |
24000 | invalid_cursor_state |
Класс 25 — Неверное состояние транзакции | |
25000 | invalid_transaction_state |
25001 | active_sql_transaction |
25002 | branch_transaction_already_active |
25008 | held_cursor_requires_same_isolation_level |
25003 | inappropriate_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 | triggered_data_change_violation |
Класс 28 — Неверное указание авторизации | |
28000 | invalid_authorization_specification |
28P01 | invalid_password |
Класс 2B — Зависимые описания прав все еще существуют | |
2B000 | dependent_privilege_descriptors_still_exist |
2BP01 | dependent_objects_still_exist |
Класс 2D — Неверное завершение транзакции | |
2D000 | invalid_transaction_termination |
Класс 2F — Исключение в подпрограмме SQL | |
2F000 | sql_routine_exception |
2F005 | function_executed_no_return_statement |
2F002 | modifying_sql_data_not_permitted |
2F003 | prohibited_sql_statement_attempted |
2F004 | reading_sql_data_not_permitted |
Класс 34 — Неверное имя курсора | |
34000 | invalid_cursor_name |
Класс 38 — Исключение во внешней подпрограмме | |
38000 | external_routine_exception |
38001 | containing_sql_not_permitted |
38002 | modifying_sql_data_not_permitted |
38003 | prohibited_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 | savepoint_exception |
3B001 | invalid_savepoint_specification |
Класс 3D — Неверное имя каталога | |
3D000 | invalid_catalog_name |
Класс 3F — Неверное имя схемы | |
3F000 | invalid_schema_name |
Класс 40 — Откат транзакции | |
40000 | transaction_rollback |
40002 | transaction_integrity_constraint_violation |
40001 | serialization_failure |
40003 | statement_completion_unknown |
40P01 | deadlock_detected |
Класс 42 — Ошибка синтаксиса или нарушение правила доступа | |
42000 | syntax_error_or_access_rule_violation |
42601 | syntax_error |
42501 | insufficient_privilege |
42846 | cannot_coerce |
42803 | grouping_error |
42P20 | windowing_error |
42P19 | invalid_recursion |
42830 | invalid_foreign_key |
42602 | invalid_name |
42622 | name_too_long |
42939 | reserved_name |
42804 | datatype_mismatch |
42P18 | indeterminate_datatype |
42P21 | collation_mismatch |
42P22 | indeterminate_collation |
42809 | wrong_object_type |
428C9 | generated_always |
42703 | undefined_column |
42883 | undefined_function |
42P01 | undefined_table |
42P02 | undefined_parameter |
42704 | undefined_object |
42701 | duplicate_column |
42P03 | duplicate_cursor |
42P04 | duplicate_database |
42723 | duplicate_function |
42P05 | duplicate_prepared_statement |
42P06 | duplicate_schema |
42P07 | duplicate_table |
42712 | duplicate_alias |
42710 | duplicate_object |
42702 | ambiguous_column |
42725 | ambiguous_function |
42P08 | ambiguous_parameter |
42P09 | ambiguous_alias |
42P10 | invalid_column_reference |
42611 | invalid_column_definition |
42P11 | invalid_cursor_definition |
42P12 | invalid_database_definition |
42P13 | invalid_function_definition |
42P14 | invalid_prepared_statement_definition |
42P15 | invalid_schema_definition |
42P16 | invalid_table_definition |
42P17 | invalid_object_definition |
Класс 44 — Нарушение WITH CHECK OPTION | |
44000 | with_check_option_violation |
Класс 53 — Нехватка ресурсов | |
53000 | insufficient_resources |
53100 | disk_full |
53200 | out_of_memory |
53300 | too_many_connections |
53400 | configuration_limit_exceeded |
Класс 54 — Превышение ограничения программы | |
54000 | program_limit_exceeded |
54001 | statement_too_complex |
54011 | too_many_columns |
54023 | too_many_arguments |
Класс 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 | operator_intervention |
57014 | query_canceled |
57P01 | admin_shutdown |
57P02 | crash_shutdown |
57P03 | cannot_connect_now |
57P04 | database_dropped |
Класс 58 — Ошибка системы (ошибка, внешняя по отношению к PostgreSQL) | |
58000 | system_error |
58030 | io_error |
58P01 | undefined_file |
58P02 | duplicate_file |
Класс 72 — Ошибка снимка | |
72000 | snapshot_too_old |
Класс 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 | no_data_found |
P0003 | too_many_rows |
P0004 | assert_failure |
Класс XX — Внутренняя ошибка | |
XX000 | internal_error |
XX001 | data_corrupted |
XX002 | index_corrupted |