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 de códigos de erro do PostgreSQL
[191].
lista todos os códigos de erro definidos no
PostgreSQL 18.1.
(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.
Este 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 do nome da condição; são as classes 00, 01 e 02.)
Para alguns tipos de erro, 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.
Estes 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 este 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 — Término bem-sucedido | |
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 (esta 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 concluída | |
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 da transação inválida | |
0B000 | invalid_transaction_initiation |
| Classe 0F — Exceção do localizador | |
0F000 | locator_exception |
0F001 | invalid_locator_specification |
| Classe 0L — Concessor inválido | |
0L000 | invalid_grantor |
0LP01 | invalid_grant_operation |
| Classe 0P — Especificação da 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 10 — Erro de XQuery | |
10608 | invalid_argument_for_xquery |
| Classe 20 — CASE sem correspondência | |
20000 | case_not_found |
| Classe 21 — Violação da 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 |
2203G | sql_json_item_cannot_be_cast_to_target_type |
| Classe 23 — Violação da 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 do cursor inválido | |
24000 | invalid_cursor_state |
| Classe 25 — Estado da 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 |
25P04 | transaction_timeout |
| Classe 26 — Nome da instrução SQL inválido | |
26000 | invalid_sql_statement_name |
| Classe 27 — Violação da alteração de dados engatilhada | |
27000 | triggered_data_change_violation |
| Classe 28 — Especificação da autorização inválida | |
28000 | invalid_authorization_specification |
28P01 | invalid_password |
| Classe 2B — Ainda existem descritores de privilégio dependente | |
2B000 | dependent_privilege_descriptors_still_exist |
2BP01 | dependent_objects_still_exist |
| Classe 2D — Término da 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 do 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 do catálogo inválido | |
3D000 | invalid_catalog_name |
| Classe 3F — Nome do esquema inválido | |
3F000 | invalid_schema_name |
| Classe 40 — Reversão da transação | |
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 excedido | |
54000 | program_limit_exceeded |
54001 | statement_too_complex |
54011 | too_many_columns |
54023 | too_many_arguments |
| Classe 55 — Objeto não está em estado de 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 |
58P03 | file_name_too_long |
| Classe F0 — Erro no arquivo de configuração | |
F0000 | config_file_error |
F0001 | lock_file_exists |
| Classe HV — Erro no empacotador de dados externos (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 |
[191]
A tabela de códigos de erro é gerada automaticamente pelo programa
generate-errcodes-table.pl presente no
arquivo Makefile, ou seja, a tabela é gerada
toda vez que a documentação é gerada, eliminando qualquer edição
que possa ter sido feita no arquivo gerado.
Para gerar a tabela traduzida para o português deve ser editado o
arquivo /src/backend/utils/errcodes.txt da
distribuição do código-fonte do PostgreSQL
(N. T.)