A todos los mensajes emitidos por el servidor de PostgreSQL se les asignan códigos de error de cinco caracteres que siguen las convenciones del estándar SQL para los códigos “SQLSTATE”. Las aplicaciones que necesitan saber qué condición de error ha ocurrido generalmente deberían comprobar el código de error, en lugar de analizar el mensaje de error textual. Es menos probable que los códigos de error cambien entre las versiones de PostgreSQL, y tampoco están sujetos a cambios debido a la localización (traducción) de los mensajes de error. Ten en cuenta que algunos, pero no todos, los códigos de error producidos por PostgreSQL están definidos por el estándar SQL; algunos códigos de error adicionales para condiciones no definidas por el estándar han sido inventados o tomados de otras bases de datos.
Según el estándar, los dos primeros caracteres de un código de error denotan una clase de errores, mientras que los tres últimos caracteres indican una condición específica dentro de esa clase. Por lo tanto, una aplicación que no reconozca el código de error específico aún podría inferir qué hacer a partir de la clase de error.
La Table A.1 enumera todos los códigos de error definidos en
PostgreSQL 18.4. (Algunos no se usan realmente
en la actualidad, pero están definidos por el estándar SQL).
También se muestran las clases de error. Para cada clase de error hay un
código de error “estándar” que tiene los tres últimos caracteres
en 000. Este código se utiliza únicamente para condiciones de error que pertenecen
a la clase pero que no tienen ningún código más específico asignado.
El símbolo que se muestra en la columna “Nombre de la condición” es el nombre de la condición que se debe usar en PL/pgSQL. Los nombres de las condiciones se pueden escribir tanto en mayúsculas como en minúsculas. (Ten en cuenta que PL/pgSQL no reconoce los nombres de condiciones de advertencia, a diferencia de los de error; esos pertenecen a las clases 00, 01 y 02).
Para algunos tipos de errores, el servidor reporta el nombre de un objeto de la base de datos
(una tabla, columna de tabla, tipo de datos o restricción) asociado con el error;
por ejemplo, el nombre de la restricción única que causó un error de
unique_violation. Dichos nombres se proporcionan en campos separados
del mensaje de informe de error para que las aplicaciones no tengan que intentar
extraerlos del texto del mensaje legible por humanos, que podría estar localizado.
A partir de PostgreSQL 9.3, la cobertura completa para esta característica
existe solo para los errores en la clase SQLSTATE 23 (violación de restricción de
integridad), pero es probable que esto se amplíe en el futuro.
Table A.1. Códigos de error de PostgreSQL
| Código de error | Nombre de la condición |
|---|---|
| Clase 00 — Finalización exitosa | |
00000 | successful_completion |
| Clase 01 — Advertencia | |
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 |
| Clase 02 — Sin datos (esta también es una clase de advertencia según el estándar SQL) | |
02000 | no_data |
02001 | no_additional_dynamic_result_sets_returned |
| Clase 03 — Sentencia SQL aún no completada | |
03000 | sql_statement_not_yet_complete |
| Clase 08 — Excepción de conexión | |
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 |
| Clase 09 — Excepción de acción disparada (triggered) | |
09000 | triggered_action_exception |
| Clase 0A — Característica no soportada | |
0A000 | feature_not_supported |
| Clase 0B — Inicio de transacción no válido | |
0B000 | invalid_transaction_initiation |
| Clase 0F — Excepción de localizador | |
0F000 | locator_exception |
0F001 | invalid_locator_specification |
| Clase 0L — Otorgante (grantor) no válido | |
0L000 | invalid_grantor |
0LP01 | invalid_grant_operation |
| Clase 0P — Especificación de rol no válida | |
0P000 | invalid_role_specification |
| Clase 0Z — Excepción de diagnóstico | |
0Z000 | diagnostics_exception |
0Z002 | stacked_diagnostics_accessed_without_active_handler |
| Clase 10 — Error de XQuery | |
10608 | invalid_argument_for_xquery |
| Clase 20 — Case no encontrado | |
20000 | case_not_found |
| Clase 21 — Violación de cardinalidad | |
21000 | cardinality_violation |
| Clase 22 — Excepción de datos | |
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 |
| Clase 23 — Violación de restricción de integridad | |
23000 | integrity_constraint_violation |
23001 | restrict_violation |
23502 | not_null_violation |
23503 | foreign_key_violation |
23505 | unique_violation |
23514 | check_violation |
23P01 | exclusion_violation |
| Clase 24 — Estado de cursor no válido | |
24000 | invalid_cursor_state |
| Clase 25 — Estado de transacción no vá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 |
| Clase 26 — Nombre de sentencia SQL no válido | |
26000 | invalid_sql_statement_name |
| Clase 27 — Violación de cambio de datos disparado (triggered) | |
27000 | triggered_data_change_violation |
| Clase 28 — Especificación de autorización no válida | |
28000 | invalid_authorization_specification |
28P01 | invalid_password |
| Clase 2B — Aún existen descriptores de privilegios dependientes | |
2B000 | dependent_privilege_descriptors_still_exist |
2BP01 | dependent_objects_still_exist |
| Clase 2D — Terminación de transacción no válida | |
2D000 | invalid_transaction_termination |
| Clase 2F — Excepción de rutina 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 |
| Clase 34 — Nombre de cursor no válido | |
34000 | invalid_cursor_name |
| Clase 38 — Excepción de rutina 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 |
| Clase 39 — Excepción de invocación de rutina 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 |
| Clase 3B — Excepción de punto de salvaguarda (savepoint) | |
3B000 | savepoint_exception |
3B001 | invalid_savepoint_specification |
| Clase 3D — Nombre de catálogo no válido | |
3D000 | invalid_catalog_name |
| Clase 3F — Nombre de esquema no válido | |
3F000 | invalid_schema_name |
| Clase 40 — Reversión de transacción (rollback) | |
40000 | transaction_rollback |
40002 | transaction_integrity_constraint_violation |
40001 | serialization_failure |
40003 | statement_completion_unknown |
40P01 | deadlock_detected |
| Clase 42 — Error de sintaxis o violación de regla de acceso | |
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 |
| Clase 44 — Violación de WITH CHECK OPTION | |
44000 | with_check_option_violation |
| Clase 53 — Recursos insuficientes | |
53000 | insufficient_resources |
53100 | disk_full |
53200 | out_of_memory |
53300 | too_many_connections |
53400 | configuration_limit_exceeded |
| Clase 54 — Límite de programa excedido | |
54000 | program_limit_exceeded |
54001 | statement_too_complex |
54011 | too_many_columns |
54023 | too_many_arguments |
| Clase 55 — Objeto no está en el estado requerido | |
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 |
| Clase 57 — Intervención del operador | |
57000 | operator_intervention |
57014 | query_canceled |
57P01 | admin_shutdown |
57P02 | crash_shutdown |
57P03 | cannot_connect_now |
57P04 | database_dropped |
57P05 | idle_session_timeout |
| Clase 58 — Error del sistema (errores externos al propio PostgreSQL) | |
58000 | system_error |
58030 | io_error |
58P01 | undefined_file |
58P02 | duplicate_file |
58P03 | file_name_too_long |
| Clase F0 — Error de archivo de configuración | |
F0000 | config_file_error |
F0001 | lock_file_exists |
| Clase HV — Error de Foreign Data Wrapper (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 |
| Clase P0 — Error de PL/pgSQL | |
P0000 | plpgsql_error |
P0001 | raise_exception |
P0002 | no_data_found |
P0003 | too_many_rows |
P0004 | assert_failure |
| Clase XX — Error interno | |
XX000 | internal_error |
XX001 | data_corrupted |
XX002 | index_corrupted |