Todas as mensagens emitidas pelo servidor PostgreSQL recebem códigos de erro de cinco caracteres que seguem as convenções do padrão SQL para códigos “SQLSTATE”. As aplicações que precisam conhecer qual condição de erro ocorreu geralmente devem testar o código de erro, em vez de examinar a mensagem de erro textual. Os códigos de erro são pouco propensos a mudar entre as versões do PostgreSQL, e também não estão sujeitos a mudanças devido à tradução das mensagens de erro. Note que alguns, mas não todos, códigos de erro produzidos pelo PostgreSQL são definidos pelo padrão SQL; alguns códigos de erro adicionais para condições não definidas pelo padrão foram inventados, ou pego emprestados de outros bancos de dados.
Segundo o padrão, os dois primeiros caracteres do código de erro denotam a classe de erros, enquanto os três últimos caracteres indicam uma condição específica dentro dessa classe. Portanto, uma aplicação que não reconhece o código de erro específico, ainda pode inferir o que fazer a partir da classe do erro.
A Tabela A.1 lista todos os códigos de erro
definidos no PostgreSQL 14.5.
(Na realidade, alguns não são usados no momento, mas são definidos
pelo padrão SQL.)
As classes de erro também são mostradas.
Para cada classe de erro existe um código de erro “padrão”,
com os três últimos caracteres iguais a 000
.
Esse código é usado apenas para condições de erro que se enquadram na
classe, mas não possuem nenhum código mais específico atribuído.
O símbolo mostrado na coluna “Nome da condição” é o nome da condição a ser usado no PL/pgSQL. Os nomes das condições podem ser escritos em letras maiúsculas ou minúsculas. (Note que o PL/pgSQL não faz distinção entre advertência e erro no nível de nome da condição; são as classes 00, 01 e 02.)
Para alguns tipos de erros, o servidor relata o nome de um objeto do
banco de dados (uma tabela, coluna de tabela, tipo de dados, ou
restrição) associado ao erro; por exemplo, o nome da restrição de
unicidade que causou o erro unique_violation
.
Esses nomes são fornecidos em campos separados da mensagem de erro,
para que as aplicações não precisem tentar extraí-los do
texto da mensagem destinado a humanos, possivelmente traduzido.
A partir do PostgreSQL 9.3, a cobertura
completa para esse recurso existe apenas para erros na classe 23 do
SQLSTATE (violação de restrição de integridade), mas é provável que
seja expandido no futuro.
Tabela A.1. Códigos de erro do PostgreSQL
Código de erro | Nome da condição |
---|---|
Classe 00 — Conclusão bem sucedida | |
00000 | successful_completion |
Classe 01 — Advertência | |
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 |
Classe 02 — Sem dados (também é uma classe de advertência segundo o padrão SQL) | |
02000 | no_data |
02001 | no_additional_dynamic_result_sets_returned |
Classe 03 — Instrução SQL ainda não completa | |
03000 | sql_statement_not_yet_complete |
Classe 08 — Exceção de conexão | |
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 |
Classe 09 — Exceção de ação engatilhada | |
09000 | triggered_action_exception |
Classe 0A — Funcionalidade sem suporte | |
0A000 | feature_not_supported |
Classe 0B — Iniciação de transação inválida | |
0B000 | invalid_transaction_initiation |
Classe 0F — Exceção de localizador | |
0F000 | locator_exception |
0F001 | invalid_locator_specification |
Classe 0L — Concedente inválido | |
0L000 | invalid_grantor |
0LP01 | invalid_grant_operation |
Classe 0P — Especificação de função de banco de dados inválida | |
0P000 | invalid_role_specification |
Classe 0Z — Exceção de diagnóstico | |
0Z000 | diagnostics_exception |
0Z002 | stacked_diagnostics_accessed_without_active_handler |
Classe 20 — Caso não encontrado (Seletor CASE) | |
20000 | case_not_found |
Classe 21 — Violação de cardinalidade | |
21000 | cardinality_violation |
Classe 22 — Exceção de dados | |
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 |
22031 | invalid_argument_for_sql_json_datetime_function |
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 |
Classe 23 — Violação de restrição de integridade | |
23000 | integrity_constraint_violation |
23001 | restrict_violation |
23502 | not_null_violation |
23503 | foreign_key_violation |
23505 | unique_violation |
23514 | check_violation |
23P01 | exclusion_violation |
Classe 24 — Estado de cursor inválido | |
24000 | invalid_cursor_state |
Classe 25 — Estado de transação inválido | |
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 |
Classe 26 — Nome de instrução SQL inválido | |
26000 | invalid_sql_statement_name |
Classe 27 — Violação de alteração de dado engatilhado | |
27000 | triggered_data_change_violation |
Classe 28 — Especificação de autorização inválida | |
28000 | invalid_authorization_specification |
28P01 | invalid_password |
Classe 2B — Descritores de privilégios dependentes ainda existem | |
2B000 | dependent_privilege_descriptors_still_exist |
2BP01 | dependent_objects_still_exist |
Classe 2D — Término de transação inválido | |
2D000 | invalid_transaction_termination |
Classe 2F — Exceção de rotina 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 |
Classe 34 — Nome de cursor inválido | |
34000 | invalid_cursor_name |
Classe 38 — Exceção de rotina externa | |
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 |
Classe 39 — Exceção de chamada de rotina externa | |
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 |
Classe 3B — Exceção de ponto de salvamento | |
3B000 | savepoint_exception |
3B001 | invalid_savepoint_specification |
Classe 3D — Nome de catálogo inválido | |
3D000 | invalid_catalog_name |
Classe 3F — Nome de esquema inválido | |
3F000 | invalid_schema_name |
Classe 40 — Reversão de transação (rollback) | |
40000 | transaction_rollback |
40002 | transaction_integrity_constraint_violation |
40001 | serialization_failure |
40003 | statement_completion_unknown |
40P01 | deadlock_detected |
Classe 42 — Erro de sintaxe, ou violação de regra de acesso | |
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 |
Classe 44 — Violação de WITH CHECK OPTION | |
44000 | with_check_option_violation |
Classe 53 — Recursos insuficientes | |
53000 | insufficient_resources |
53100 | disk_full |
53200 | out_of_memory |
53300 | too_many_connections |
53400 | configuration_limit_exceeded |
Classe 54 — Limite do programa excedido | |
54000 | program_limit_exceeded |
54001 | statement_too_complex |
54011 | too_many_columns |
54023 | too_many_arguments |
Classe 55 — Objeto fora do estado pré-requisito | |
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 |
Classe 57 — Intervenção do operador | |
57000 | operator_intervention |
57014 | query_canceled |
57P01 | admin_shutdown |
57P02 | crash_shutdown |
57P03 | cannot_connect_now |
57P04 | database_dropped |
57P05 | idle_session_timeout |
Classe 58 — Erro do sistema (erros externos ao próprio PostgreSQL) | |
58000 | system_error |
58030 | io_error |
58P01 | undefined_file |
58P02 | duplicate_file |
Classe 72 — Falha de instantâneo | |
72000 | snapshot_too_old |
Classe F0 — Erro de arquivo de configuração | |
F0000 | config_file_error |
F0001 | lock_file_exists |
Classe HV — Erro de empacotador de dados estrangeiros (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 |
Classe P0 — Erro do PL/pgSQL | |
P0000 | plpgsql_error |
P0001 | raise_exception |
P0002 | no_data_found |
P0003 | too_many_rows |
P0004 | assert_failure |
Classe XX — Erro interno | |
XX000 | internal_error |
XX001 | data_corrupted |
XX002 | index_corrupted |