""" psycopg exceptions DBAPI-defined Exceptions are defined in the following hierarchy:: Exceptions |__Warning |__Error |__InterfaceError |__DatabaseError |__DataError |__OperationalError |__IntegrityError |__InternalError |__ProgrammingError |__NotSupportedError """ # Copyright (C) 2020 The Psycopg Team from dataclasses import dataclass, field, fields from typing import Any, Callable, Dict, List, NoReturn, Optional, Sequence, Tuple, Type from typing import Union, TYPE_CHECKING from typing_extensions import TypeAlias from asyncio import CancelledError from .pq.abc import PGconn, PGresult from .pq._enums import ConnStatus, DiagnosticField, PipelineStatus, TransactionStatus from ._compat import TypeGuard if TYPE_CHECKING: from .pq.misc import PGnotify, ConninfoOption ErrorInfo: TypeAlias = Union[None, PGresult, Dict[int, Optional[bytes]]] _sqlcodes: Dict[str, "Type[Error]"] = {} @dataclass class FinishedPGconn: """Finished libpq connection. Attributes are set from a real `~pscopg.pq.PGconn` but any operations will raise an `~psycopg.OperationalError`. """ info: List["ConninfoOption"] = field(default_factory=list) db: bytes = b"" user: bytes = b"" password: bytes = b"" host: bytes = b"" hostaddr: bytes = b"" port: bytes = b"" tty: bytes = b"" options: bytes = b"" status: int = ConnStatus.BAD.value transaction_status: int = TransactionStatus.UNKNOWN.value pipeline_status: int = PipelineStatus.OFF.value error_message: bytes = b"" server_version: int = 0 backend_pid: int = 0 needs_password: bool = False used_password: bool = False ssl_in_use: bool = False nonblocking: int = 0 notice_handler: Optional[Callable[["PGresult"], None]] = None notify_handler: Optional[Callable[["PGnotify"], None]] = None @staticmethod def _raise() -> NoReturn: raise OperationalError("the connection is closed") @classmethod def connect(cls, *args: Any) -> NoReturn: raise TypeError(f"{cls} is unusable") @classmethod def connect_start(cls, *args: Any) -> NoReturn: raise TypeError(f"{cls} is unusable") def connect_poll(self) -> NoReturn: self._raise() def finish(self) -> None: pass def reset(self) -> NoReturn: self._raise() def reset_start(self) -> NoReturn: self._raise() def reset_poll(self) -> NoReturn: self._raise() @classmethod def ping(cls, *args: Any) -> NoReturn: raise TypeError(f"{cls} is unusable") def parameter_status(self, *args: Any) -> NoReturn: self._raise() @property def socket(self) -> NoReturn: self._raise() def exec_(self, *args: Any) -> NoReturn: self._raise() def send_query(self, *args: Any) -> None: self._raise() def exec_params(self, *args: Any) -> NoReturn: self._raise() def send_query_params(self, *args: Any) -> NoReturn: self._raise() def send_prepare(self, *args: Any) -> NoReturn: self._raise() def send_query_prepared(self, *args: Any) -> NoReturn: self._raise() def prepare(self, *args: Any) -> NoReturn: self._raise() def exec_prepared(self, *args: Any) -> NoReturn: self._raise() def describe_prepared(self, *args: Any) -> NoReturn: self._raise() def send_describe_prepared(self, *args: Any) -> NoReturn: self._raise() def describe_portal(self, *args: Any) -> NoReturn: self._raise() def send_describe_portal(self, *args: Any) -> NoReturn: self._raise() def get_result(self) -> NoReturn: self._raise() def consume_input(self) -> NoReturn: self._raise() def is_busy(self) -> NoReturn: self._raise() def flush(self) -> NoReturn: self._raise() def set_single_row_mode(self) -> NoReturn: self._raise() def get_cancel(self) -> NoReturn: self._raise() def notifies(self) -> NoReturn: self._raise() def put_copy_data(self, *args: Any) -> NoReturn: self._raise() def put_copy_end(self, *args: Any) -> NoReturn: self._raise() def get_copy_data(self, *args: Any) -> NoReturn: self._raise() def trace(self, *args: Any) -> NoReturn: self._raise() def set_trace_flags(self, *args: Any) -> NoReturn: self._raise() def untrace(self) -> NoReturn: self._raise() def encrypt_password(self, *args: Any) -> NoReturn: self._raise() def make_empty_result(self, *args: Any) -> NoReturn: self._raise() def enter_pipeline_mode(self) -> NoReturn: self._raise() def exit_pipeline_mode(self) -> NoReturn: self._raise() def pipeline_sync(self) -> NoReturn: self._raise() def send_flush_request(self) -> NoReturn: self._raise() def finish_pgconn(pgconn: PGconn) -> PGconn: args = {} for f in fields(FinishedPGconn): try: args[f.name] = getattr(pgconn, f.name) except Exception: pass pgconn.finish() return FinishedPGconn(**args) class Warning(Exception): """ Exception raised for important warnings. Defined for DBAPI compatibility, but never raised by ``psycopg``. """ __module__ = "psycopg" class Error(Exception): """ Base exception for all the errors psycopg will raise. Exception that is the base class of all other error exceptions. You can use this to catch all errors with one single `!except` statement. This exception is guaranteed to be picklable. """ __module__ = "psycopg" sqlstate: Optional[str] = None def __init__( self, *args: Sequence[Any], info: ErrorInfo = None, encoding: str = "utf-8", pgconn: Optional[PGconn] = None, ): super().__init__(*args) self._info = info self._encoding = encoding self._pgconn = pgconn # Handle sqlstate codes for which we don't have a class. if not self.sqlstate and info: self.sqlstate = self.diag.sqlstate @property def pgconn(self) -> Optional[PGconn]: """The connection object, if the error was raised from a connection attempt. :rtype: Optional[psycopg.pq.PGconn] """ return self._pgconn if self._pgconn else None @property def pgresult(self) -> Optional[PGresult]: """The result object, if the exception was raised after a failed query. :rtype: Optional[psycopg.pq.PGresult] """ return self._info if _is_pgresult(self._info) else None @property def diag(self) -> "Diagnostic": """ A `Diagnostic` object to inspect details of the errors from the database. """ return Diagnostic(self._info, encoding=self._encoding) def __reduce__(self) -> Union[str, Tuple[Any, ...]]: res = super().__reduce__() if isinstance(res, tuple) and len(res) >= 3: # To make the exception picklable res[2]["_info"] = _info_to_dict(self._info) res[2]["_pgconn"] = None return res class InterfaceError(Error): """ An error related to the database interface rather than the database itself. """ __module__ = "psycopg" class DatabaseError(Error): """ Exception raised for errors that are related to the database. """ __module__ = "psycopg" def __init_subclass__(cls, code: Optional[str] = None, name: Optional[str] = None): if code: _sqlcodes[code] = cls cls.sqlstate = code if name: _sqlcodes[name] = cls class DataError(DatabaseError): """ An error caused by problems with the processed data. Examples may be division by zero, numeric value out of range, etc. """ __module__ = "psycopg" class OperationalError(DatabaseError): """ An error related to the database's operation. These errors are not necessarily under the control of the programmer, e.g. an unexpected disconnect occurs, the data source name is not found, a transaction could not be processed, a memory allocation error occurred during processing, etc. """ __module__ = "psycopg" class IntegrityError(DatabaseError): """ An error caused when the relational integrity of the database is affected. An example may be a foreign key check failed. """ __module__ = "psycopg" class InternalError(DatabaseError): """ An error generated when the database encounters an internal error, Examples could be the cursor is not valid anymore, the transaction is out of sync, etc. """ __module__ = "psycopg" class ProgrammingError(DatabaseError): """ Exception raised for programming errors Examples may be table not found or already exists, syntax error in the SQL statement, wrong number of parameters specified, etc. """ __module__ = "psycopg" class NotSupportedError(DatabaseError): """ A method or database API was used which is not supported by the database. """ __module__ = "psycopg" class ConnectionTimeout(OperationalError): """ Exception raised on timeout of the `~psycopg.Connection.connect()` method. The error is raised if the ``connect_timeout`` is specified and a connection is not obtained in useful time. Subclass of `~psycopg.OperationalError`. """ class PipelineAborted(OperationalError): """ Raised when a operation fails because the current pipeline is in aborted state. Subclass of `~psycopg.OperationalError`. """ class Diagnostic: """Details from a database error report.""" def __init__(self, info: ErrorInfo, encoding: str = "utf-8"): self._info = info self._encoding = encoding @property def severity(self) -> Optional[str]: return self._error_message(DiagnosticField.SEVERITY) @property def severity_nonlocalized(self) -> Optional[str]: return self._error_message(DiagnosticField.SEVERITY_NONLOCALIZED) @property def sqlstate(self) -> Optional[str]: return self._error_message(DiagnosticField.SQLSTATE) @property def message_primary(self) -> Optional[str]: return self._error_message(DiagnosticField.MESSAGE_PRIMARY) @property def message_detail(self) -> Optional[str]: return self._error_message(DiagnosticField.MESSAGE_DETAIL) @property def message_hint(self) -> Optional[str]: return self._error_message(DiagnosticField.MESSAGE_HINT) @property def statement_position(self) -> Optional[str]: return self._error_message(DiagnosticField.STATEMENT_POSITION) @property def internal_position(self) -> Optional[str]: return self._error_message(DiagnosticField.INTERNAL_POSITION) @property def internal_query(self) -> Optional[str]: return self._error_message(DiagnosticField.INTERNAL_QUERY) @property def context(self) -> Optional[str]: return self._error_message(DiagnosticField.CONTEXT) @property def schema_name(self) -> Optional[str]: return self._error_message(DiagnosticField.SCHEMA_NAME) @property def table_name(self) -> Optional[str]: return self._error_message(DiagnosticField.TABLE_NAME) @property def column_name(self) -> Optional[str]: return self._error_message(DiagnosticField.COLUMN_NAME) @property def datatype_name(self) -> Optional[str]: return self._error_message(DiagnosticField.DATATYPE_NAME) @property def constraint_name(self) -> Optional[str]: return self._error_message(DiagnosticField.CONSTRAINT_NAME) @property def source_file(self) -> Optional[str]: return self._error_message(DiagnosticField.SOURCE_FILE) @property def source_line(self) -> Optional[str]: return self._error_message(DiagnosticField.SOURCE_LINE) @property def source_function(self) -> Optional[str]: return self._error_message(DiagnosticField.SOURCE_FUNCTION) def _error_message(self, field: DiagnosticField) -> Optional[str]: if self._info: if isinstance(self._info, dict): val = self._info.get(field) else: val = self._info.error_field(field) if val is not None: return val.decode(self._encoding, "replace") return None def __reduce__(self) -> Union[str, Tuple[Any, ...]]: res = super().__reduce__() if isinstance(res, tuple) and len(res) >= 3: res[2]["_info"] = _info_to_dict(self._info) return res def _info_to_dict(info: ErrorInfo) -> ErrorInfo: """ Convert a PGresult to a dictionary to make the info picklable. """ # PGresult is a protocol, can't use isinstance if _is_pgresult(info): return {v: info.error_field(v) for v in DiagnosticField} else: return info def lookup(sqlstate: str) -> Type[Error]: """Lookup an error code or `constant name`__ and return its exception class. Raise `!KeyError` if the code is not found. .. __: https://www.postgresql.org/docs/current/errcodes-appendix.html #ERRCODES-TABLE """ return _sqlcodes[sqlstate.upper()] def error_from_result(result: PGresult, encoding: str = "utf-8") -> Error: from psycopg import pq state = result.error_field(DiagnosticField.SQLSTATE) or b"" cls = _class_for_state(state.decode("ascii")) return cls( pq.error_message(result, encoding=encoding), info=result, encoding=encoding, ) def _is_pgresult(info: ErrorInfo) -> TypeGuard[PGresult]: """Return True if an ErrorInfo is a PGresult instance.""" # PGresult is a protocol, can't use isinstance return hasattr(info, "error_field") def _class_for_state(sqlstate: str) -> Type[Error]: try: return lookup(sqlstate) except KeyError: return get_base_exception(sqlstate) def get_base_exception(sqlstate: str) -> Type[Error]: return ( _base_exc_map.get(sqlstate[:2]) or _base_exc_map.get(sqlstate[:1]) or DatabaseError ) _base_exc_map = { "08": OperationalError, # Connection Exception "0A": NotSupportedError, # Feature Not Supported "20": ProgrammingError, # Case Not Foud "21": ProgrammingError, # Cardinality Violation "22": DataError, # Data Exception "23": IntegrityError, # Integrity Constraint Violation "24": InternalError, # Invalid Cursor State "25": InternalError, # Invalid Transaction State "26": ProgrammingError, # Invalid SQL Statement Name * "27": OperationalError, # Triggered Data Change Violation "28": OperationalError, # Invalid Authorization Specification "2B": InternalError, # Dependent Privilege Descriptors Still Exist "2D": InternalError, # Invalid Transaction Termination "2F": OperationalError, # SQL Routine Exception * "34": ProgrammingError, # Invalid Cursor Name * "38": OperationalError, # External Routine Exception * "39": OperationalError, # External Routine Invocation Exception * "3B": OperationalError, # Savepoint Exception * "3D": ProgrammingError, # Invalid Catalog Name "3F": ProgrammingError, # Invalid Schema Name "40": OperationalError, # Transaction Rollback "42": ProgrammingError, # Syntax Error or Access Rule Violation "44": ProgrammingError, # WITH CHECK OPTION Violation "53": OperationalError, # Insufficient Resources "54": OperationalError, # Program Limit Exceeded "55": OperationalError, # Object Not In Prerequisite State "57": OperationalError, # Operator Intervention "58": OperationalError, # System Error (errors external to PostgreSQL itself) "F": OperationalError, # Configuration File Error "H": OperationalError, # Foreign Data Wrapper Error (SQL/MED) "P": ProgrammingError, # PL/pgSQL Error "X": InternalError, # Internal Error } # Error classes generated by tools/update_errors.py # fmt: off # autogenerated: start # Class 02 - No Data (this is also a warning class per the SQL standard) class NoData(DatabaseError, code='02000', name='NO_DATA'): pass class NoAdditionalDynamicResultSetsReturned(DatabaseError, code='02001', name='NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED'): pass # Class 03 - SQL Statement Not Yet Complete class SqlStatementNotYetComplete(DatabaseError, code='03000', name='SQL_STATEMENT_NOT_YET_COMPLETE'): pass # Class 08 - Connection Exception class ConnectionException(OperationalError, code='08000', name='CONNECTION_EXCEPTION'): pass class SqlclientUnableToEstablishSqlconnection(OperationalError, code='08001', name='SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION'): pass class ConnectionDoesNotExist(OperationalError, code='08003', name='CONNECTION_DOES_NOT_EXIST'): pass class SqlserverRejectedEstablishmentOfSqlconnection(OperationalError, code='08004', name='SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION'): pass class ConnectionFailure(OperationalError, code='08006', name='CONNECTION_FAILURE'): pass class TransactionResolutionUnknown(OperationalError, code='08007', name='TRANSACTION_RESOLUTION_UNKNOWN'): pass class ProtocolViolation(OperationalError, code='08P01', name='PROTOCOL_VIOLATION'): pass # Class 09 - Triggered Action Exception class TriggeredActionException(DatabaseError, code='09000', name='TRIGGERED_ACTION_EXCEPTION'): pass # Class 0A - Feature Not Supported class FeatureNotSupported(NotSupportedError, code='0A000', name='FEATURE_NOT_SUPPORTED'): pass # Class 0B - Invalid Transaction Initiation class InvalidTransactionInitiation(DatabaseError, code='0B000', name='INVALID_TRANSACTION_INITIATION'): pass # Class 0F - Locator Exception class LocatorException(DatabaseError, code='0F000', name='LOCATOR_EXCEPTION'): pass class InvalidLocatorSpecification(DatabaseError, code='0F001', name='INVALID_LOCATOR_SPECIFICATION'): pass # Class 0L - Invalid Grantor class InvalidGrantor(DatabaseError, code='0L000', name='INVALID_GRANTOR'): pass class InvalidGrantOperation(DatabaseError, code='0LP01', name='INVALID_GRANT_OPERATION'): pass # Class 0P - Invalid Role Specification class InvalidRoleSpecification(DatabaseError, code='0P000', name='INVALID_ROLE_SPECIFICATION'): pass # Class 0Z - Diagnostics Exception class DiagnosticsException(DatabaseError, code='0Z000', name='DIAGNOSTICS_EXCEPTION'): pass class StackedDiagnosticsAccessedWithoutActiveHandler(DatabaseError, code='0Z002', name='STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER'): pass # Class 20 - Case Not Found class CaseNotFound(ProgrammingError, code='20000', name='CASE_NOT_FOUND'): pass # Class 21 - Cardinality Violation class CardinalityViolation(ProgrammingError, code='21000', name='CARDINALITY_VIOLATION'): pass # Class 22 - Data Exception class DataException(DataError, code='22000', name='DATA_EXCEPTION'): pass class StringDataRightTruncation(DataError, code='22001', name='STRING_DATA_RIGHT_TRUNCATION'): pass class NullValueNoIndicatorParameter(DataError, code='22002', name='NULL_VALUE_NO_INDICATOR_PARAMETER'): pass class NumericValueOutOfRange(DataError, code='22003', name='NUMERIC_VALUE_OUT_OF_RANGE'): pass class NullValueNotAllowed(DataError, code='22004', name='NULL_VALUE_NOT_ALLOWED'): pass class ErrorInAssignment(DataError, code='22005', name='ERROR_IN_ASSIGNMENT'): pass class InvalidDatetimeFormat(DataError, code='22007', name='INVALID_DATETIME_FORMAT'): pass class DatetimeFieldOverflow(DataError, code='22008', name='DATETIME_FIELD_OVERFLOW'): pass class InvalidTimeZoneDisplacementValue(DataError, code='22009', name='INVALID_TIME_ZONE_DISPLACEMENT_VALUE'): pass class EscapeCharacterConflict(DataError, code='2200B', name='ESCAPE_CHARACTER_CONFLICT'): pass class InvalidUseOfEscapeCharacter(DataError, code='2200C', name='INVALID_USE_OF_ESCAPE_CHARACTER'): pass class InvalidEscapeOctet(DataError, code='2200D', name='INVALID_ESCAPE_OCTET'): pass class ZeroLengthCharacterString(DataError, code='2200F', name='ZERO_LENGTH_CHARACTER_STRING'): pass class MostSpecificTypeMismatch(DataError, code='2200G', name='MOST_SPECIFIC_TYPE_MISMATCH'): pass class SequenceGeneratorLimitExceeded(DataError, code='2200H', name='SEQUENCE_GENERATOR_LIMIT_EXCEEDED'): pass class NotAnXmlDocument(DataError, code='2200L', name='NOT_AN_XML_DOCUMENT'): pass class InvalidXmlDocument(DataError, code='2200M', name='INVALID_XML_DOCUMENT'): pass class InvalidXmlContent(DataError, code='2200N', name='INVALID_XML_CONTENT'): pass class InvalidXmlComment(DataError, code='2200S', name='INVALID_XML_COMMENT'): pass class InvalidXmlProcessingInstruction(DataError, code='2200T', name='INVALID_XML_PROCESSING_INSTRUCTION'): pass class InvalidIndicatorParameterValue(DataError, code='22010', name='INVALID_INDICATOR_PARAMETER_VALUE'): pass class SubstringError(DataError, code='22011', name='SUBSTRING_ERROR'): pass class DivisionByZero(DataError, code='22012', name='DIVISION_BY_ZERO'): pass class InvalidPrecedingOrFollowingSize(DataError, code='22013', name='INVALID_PRECEDING_OR_FOLLOWING_SIZE'): pass class InvalidArgumentForNtileFunction(DataError, code='22014', name='INVALID_ARGUMENT_FOR_NTILE_FUNCTION'): pass class IntervalFieldOverflow(DataError, code='22015', name='INTERVAL_FIELD_OVERFLOW'): pass class InvalidArgumentForNthValueFunction(DataError, code='22016', name='INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION'): pass class InvalidCharacterValueForCast(DataError, code='22018', name='INVALID_CHARACTER_VALUE_FOR_CAST'): pass class InvalidEscapeCharacter(DataError, code='22019', name='INVALID_ESCAPE_CHARACTER'): pass class InvalidRegularExpression(DataError, code='2201B', name='INVALID_REGULAR_EXPRESSION'): pass class InvalidArgumentForLogarithm(DataError, code='2201E', name='INVALID_ARGUMENT_FOR_LOGARITHM'): pass class InvalidArgumentForPowerFunction(DataError, code='2201F', name='INVALID_ARGUMENT_FOR_POWER_FUNCTION'): pass class InvalidArgumentForWidthBucketFunction(DataError, code='2201G', name='INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION'): pass class InvalidRowCountInLimitClause(DataError, code='2201W', name='INVALID_ROW_COUNT_IN_LIMIT_CLAUSE'): pass class InvalidRowCountInResultOffsetClause(DataError, code='2201X', name='INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE'): pass class CharacterNotInRepertoire(DataError, code='22021', name='CHARACTER_NOT_IN_REPERTOIRE'): pass class IndicatorOverflow(DataError, code='22022', name='INDICATOR_OVERFLOW'): pass class InvalidParameterValue(DataError, code='22023', name='INVALID_PARAMETER_VALUE'): pass class UnterminatedCString(DataError, code='22024', name='UNTERMINATED_C_STRING'): pass class InvalidEscapeSequence(DataError, code='22025', name='INVALID_ESCAPE_SEQUENCE'): pass class StringDataLengthMismatch(DataError, code='22026', name='STRING_DATA_LENGTH_MISMATCH'): pass class TrimError(DataError, code='22027', name='TRIM_ERROR'): pass class ArraySubscriptError(DataError, code='2202E', name='ARRAY_SUBSCRIPT_ERROR'): pass class InvalidTablesampleRepeat(DataError, code='2202G', name='INVALID_TABLESAMPLE_REPEAT'): pass class InvalidTablesampleArgument(DataError, code='2202H', name='INVALID_TABLESAMPLE_ARGUMENT'): pass class DuplicateJsonObjectKeyValue(DataError, code='22030', name='DUPLICATE_JSON_OBJECT_KEY_VALUE'): pass class InvalidArgumentForSqlJsonDatetimeFunction(DataError, code='22031', name='INVALID_ARGUMENT_FOR_SQL_JSON_DATETIME_FUNCTION'): pass class InvalidJsonText(DataError, code='22032', name='INVALID_JSON_TEXT'): pass class InvalidSqlJsonSubscript(DataError, code='22033', name='INVALID_SQL_JSON_SUBSCRIPT'): pass class MoreThanOneSqlJsonItem(DataError, code='22034', name='MORE_THAN_ONE_SQL_JSON_ITEM'): pass class NoSqlJsonItem(DataError, code='22035', name='NO_SQL_JSON_ITEM'): pass class NonNumericSqlJsonItem(DataError, code='22036', name='NON_NUMERIC_SQL_JSON_ITEM'): pass class NonUniqueKeysInAJsonObject(DataError, code='22037', name='NON_UNIQUE_KEYS_IN_A_JSON_OBJECT'): pass class SingletonSqlJsonItemRequired(DataError, code='22038', name='SINGLETON_SQL_JSON_ITEM_REQUIRED'): pass class SqlJsonArrayNotFound(DataError, code='22039', name='SQL_JSON_ARRAY_NOT_FOUND'): pass class SqlJsonMemberNotFound(DataError, code='2203A', name='SQL_JSON_MEMBER_NOT_FOUND'): pass class SqlJsonNumberNotFound(DataError, code='2203B', name='SQL_JSON_NUMBER_NOT_FOUND'): pass class SqlJsonObjectNotFound(DataError, code='2203C', name='SQL_JSON_OBJECT_NOT_FOUND'): pass class TooManyJsonArrayElements(DataError, code='2203D', name='TOO_MANY_JSON_ARRAY_ELEMENTS'): pass class TooManyJsonObjectMembers(DataError, code='2203E', name='TOO_MANY_JSON_OBJECT_MEMBERS'): pass class SqlJsonScalarRequired(DataError, code='2203F', name='SQL_JSON_SCALAR_REQUIRED'): pass class SqlJsonItemCannotBeCastToTargetType(DataError, code='2203G', name='SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE'): pass class FloatingPointException(DataError, code='22P01', name='FLOATING_POINT_EXCEPTION'): pass class InvalidTextRepresentation(DataError, code='22P02', name='INVALID_TEXT_REPRESENTATION'): pass class InvalidBinaryRepresentation(DataError, code='22P03', name='INVALID_BINARY_REPRESENTATION'): pass class BadCopyFileFormat(DataError, code='22P04', name='BAD_COPY_FILE_FORMAT'): pass class UntranslatableCharacter(DataError, code='22P05', name='UNTRANSLATABLE_CHARACTER'): pass class NonstandardUseOfEscapeCharacter(DataError, code='22P06', name='NONSTANDARD_USE_OF_ESCAPE_CHARACTER'): pass # Class 23 - Integrity Constraint Violation class IntegrityConstraintViolation(IntegrityError, code='23000', name='INTEGRITY_CONSTRAINT_VIOLATION'): pass class RestrictViolation(IntegrityError, code='23001', name='RESTRICT_VIOLATION'): pass class NotNullViolation(IntegrityError, code='23502', name='NOT_NULL_VIOLATION'): pass class ForeignKeyViolation(IntegrityError, code='23503', name='FOREIGN_KEY_VIOLATION'): pass class UniqueViolation(IntegrityError, code='23505', name='UNIQUE_VIOLATION'): pass class CheckViolation(IntegrityError, code='23514', name='CHECK_VIOLATION'): pass class ExclusionViolation(IntegrityError, code='23P01', name='EXCLUSION_VIOLATION'): pass # Class 24 - Invalid Cursor State class InvalidCursorState(InternalError, code='24000', name='INVALID_CURSOR_STATE'): pass # Class 25 - Invalid Transaction State class InvalidTransactionState(InternalError, code='25000', name='INVALID_TRANSACTION_STATE'): pass class ActiveSqlTransaction(InternalError, code='25001', name='ACTIVE_SQL_TRANSACTION'): pass class BranchTransactionAlreadyActive(InternalError, code='25002', name='BRANCH_TRANSACTION_ALREADY_ACTIVE'): pass class InappropriateAccessModeForBranchTransaction(InternalError, code='25003', name='INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION'): pass class InappropriateIsolationLevelForBranchTransaction(InternalError, code='25004', name='INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION'): pass class NoActiveSqlTransactionForBranchTransaction(InternalError, code='25005', name='NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION'): pass class ReadOnlySqlTransaction(InternalError, code='25006', name='READ_ONLY_SQL_TRANSACTION'): pass class SchemaAndDataStatementMixingNotSupported(InternalError, code='25007', name='SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED'): pass class HeldCursorRequiresSameIsolationLevel(InternalError, code='25008', name='HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL'): pass class NoActiveSqlTransaction(InternalError, code='25P01', name='NO_ACTIVE_SQL_TRANSACTION'): pass class InFailedSqlTransaction(InternalError, code='25P02', name='IN_FAILED_SQL_TRANSACTION'): pass class IdleInTransactionSessionTimeout(InternalError, code='25P03', name='IDLE_IN_TRANSACTION_SESSION_TIMEOUT'): pass # Class 26 - Invalid SQL Statement Name class InvalidSqlStatementName(ProgrammingError, code='26000', name='INVALID_SQL_STATEMENT_NAME'): pass # Class 27 - Triggered Data Change Violation class TriggeredDataChangeViolation(OperationalError, code='27000', name='TRIGGERED_DATA_CHANGE_VIOLATION'): pass # Class 28 - Invalid Authorization Specification class InvalidAuthorizationSpecification(OperationalError, code='28000', name='INVALID_AUTHORIZATION_SPECIFICATION'): pass class InvalidPassword(OperationalError, code='28P01', name='INVALID_PASSWORD'): pass # Class 2B - Dependent Privilege Descriptors Still Exist class DependentPrivilegeDescriptorsStillExist(InternalError, code='2B000', name='DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST'): pass class DependentObjectsStillExist(InternalError, code='2BP01', name='DEPENDENT_OBJECTS_STILL_EXIST'): pass # Class 2D - Invalid Transaction Termination class InvalidTransactionTermination(InternalError, code='2D000', name='INVALID_TRANSACTION_TERMINATION'): pass # Class 2F - SQL Routine Exception class SqlRoutineException(OperationalError, code='2F000', name='SQL_ROUTINE_EXCEPTION'): pass class ModifyingSqlDataNotPermitted(OperationalError, code='2F002', name='MODIFYING_SQL_DATA_NOT_PERMITTED'): pass class ProhibitedSqlStatementAttempted(OperationalError, code='2F003', name='PROHIBITED_SQL_STATEMENT_ATTEMPTED'): pass class ReadingSqlDataNotPermitted(OperationalError, code='2F004', name='READING_SQL_DATA_NOT_PERMITTED'): pass class FunctionExecutedNoReturnStatement(OperationalError, code='2F005', name='FUNCTION_EXECUTED_NO_RETURN_STATEMENT'): pass # Class 34 - Invalid Cursor Name class InvalidCursorName(ProgrammingError, code='34000', name='INVALID_CURSOR_NAME'): pass # Class 38 - External Routine Exception class ExternalRoutineException(OperationalError, code='38000', name='EXTERNAL_ROUTINE_EXCEPTION'): pass class ContainingSqlNotPermitted(OperationalError, code='38001', name='CONTAINING_SQL_NOT_PERMITTED'): pass class ModifyingSqlDataNotPermittedExt(OperationalError, code='38002', name='MODIFYING_SQL_DATA_NOT_PERMITTED'): pass class ProhibitedSqlStatementAttemptedExt(OperationalError, code='38003', name='PROHIBITED_SQL_STATEMENT_ATTEMPTED'): pass class ReadingSqlDataNotPermittedExt(OperationalError, code='38004', name='READING_SQL_DATA_NOT_PERMITTED'): pass # Class 39 - External Routine Invocation Exception class ExternalRoutineInvocationException(OperationalError, code='39000', name='EXTERNAL_ROUTINE_INVOCATION_EXCEPTION'): pass class InvalidSqlstateReturned(OperationalError, code='39001', name='INVALID_SQLSTATE_RETURNED'): pass class NullValueNotAllowedExt(OperationalError, code='39004', name='NULL_VALUE_NOT_ALLOWED'): pass class TriggerProtocolViolated(OperationalError, code='39P01', name='TRIGGER_PROTOCOL_VIOLATED'): pass class SrfProtocolViolated(OperationalError, code='39P02', name='SRF_PROTOCOL_VIOLATED'): pass class EventTriggerProtocolViolated(OperationalError, code='39P03', name='EVENT_TRIGGER_PROTOCOL_VIOLATED'): pass # Class 3B - Savepoint Exception class SavepointException(OperationalError, code='3B000', name='SAVEPOINT_EXCEPTION'): pass class InvalidSavepointSpecification(OperationalError, code='3B001', name='INVALID_SAVEPOINT_SPECIFICATION'): pass # Class 3D - Invalid Catalog Name class InvalidCatalogName(ProgrammingError, code='3D000', name='INVALID_CATALOG_NAME'): pass # Class 3F - Invalid Schema Name class InvalidSchemaName(ProgrammingError, code='3F000', name='INVALID_SCHEMA_NAME'): pass # Class 40 - Transaction Rollback class TransactionRollback(OperationalError, code='40000', name='TRANSACTION_ROLLBACK'): pass class SerializationFailure(OperationalError, code='40001', name='SERIALIZATION_FAILURE'): pass class TransactionIntegrityConstraintViolation(OperationalError, code='40002', name='TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION'): pass class StatementCompletionUnknown(OperationalError, code='40003', name='STATEMENT_COMPLETION_UNKNOWN'): pass class DeadlockDetected(OperationalError, code='40P01', name='DEADLOCK_DETECTED'): pass # Class 42 - Syntax Error or Access Rule Violation class SyntaxErrorOrAccessRuleViolation(ProgrammingError, code='42000', name='SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION'): pass class InsufficientPrivilege(ProgrammingError, code='42501', name='INSUFFICIENT_PRIVILEGE'): pass class SyntaxError(ProgrammingError, code='42601', name='SYNTAX_ERROR'): pass class InvalidName(ProgrammingError, code='42602', name='INVALID_NAME'): pass class InvalidColumnDefinition(ProgrammingError, code='42611', name='INVALID_COLUMN_DEFINITION'): pass class NameTooLong(ProgrammingError, code='42622', name='NAME_TOO_LONG'): pass class DuplicateColumn(ProgrammingError, code='42701', name='DUPLICATE_COLUMN'): pass class AmbiguousColumn(ProgrammingError, code='42702', name='AMBIGUOUS_COLUMN'): pass class UndefinedColumn(ProgrammingError, code='42703', name='UNDEFINED_COLUMN'): pass class UndefinedObject(ProgrammingError, code='42704', name='UNDEFINED_OBJECT'): pass class DuplicateObject(ProgrammingError, code='42710', name='DUPLICATE_OBJECT'): pass class DuplicateAlias(ProgrammingError, code='42712', name='DUPLICATE_ALIAS'): pass class DuplicateFunction(ProgrammingError, code='42723', name='DUPLICATE_FUNCTION'): pass class AmbiguousFunction(ProgrammingError, code='42725', name='AMBIGUOUS_FUNCTION'): pass class GroupingError(ProgrammingError, code='42803', name='GROUPING_ERROR'): pass class DatatypeMismatch(ProgrammingError, code='42804', name='DATATYPE_MISMATCH'): pass class WrongObjectType(ProgrammingError, code='42809', name='WRONG_OBJECT_TYPE'): pass class InvalidForeignKey(ProgrammingError, code='42830', name='INVALID_FOREIGN_KEY'): pass class CannotCoerce(ProgrammingError, code='42846', name='CANNOT_COERCE'): pass class UndefinedFunction(ProgrammingError, code='42883', name='UNDEFINED_FUNCTION'): pass class GeneratedAlways(ProgrammingError, code='428C9', name='GENERATED_ALWAYS'): pass class ReservedName(ProgrammingError, code='42939', name='RESERVED_NAME'): pass class UndefinedTable(ProgrammingError, code='42P01', name='UNDEFINED_TABLE'): pass class UndefinedParameter(ProgrammingError, code='42P02', name='UNDEFINED_PARAMETER'): pass class DuplicateCursor(ProgrammingError, code='42P03', name='DUPLICATE_CURSOR'): pass class DuplicateDatabase(ProgrammingError, code='42P04', name='DUPLICATE_DATABASE'): pass class DuplicatePreparedStatement(ProgrammingError, code='42P05', name='DUPLICATE_PREPARED_STATEMENT'): pass class DuplicateSchema(ProgrammingError, code='42P06', name='DUPLICATE_SCHEMA'): pass class DuplicateTable(ProgrammingError, code='42P07', name='DUPLICATE_TABLE'): pass class AmbiguousParameter(ProgrammingError, code='42P08', name='AMBIGUOUS_PARAMETER'): pass class AmbiguousAlias(ProgrammingError, code='42P09', name='AMBIGUOUS_ALIAS'): pass class InvalidColumnReference(ProgrammingError, code='42P10', name='INVALID_COLUMN_REFERENCE'): pass class InvalidCursorDefinition(ProgrammingError, code='42P11', name='INVALID_CURSOR_DEFINITION'): pass class InvalidDatabaseDefinition(ProgrammingError, code='42P12', name='INVALID_DATABASE_DEFINITION'): pass class InvalidFunctionDefinition(ProgrammingError, code='42P13', name='INVALID_FUNCTION_DEFINITION'): pass class InvalidPreparedStatementDefinition(ProgrammingError, code='42P14', name='INVALID_PREPARED_STATEMENT_DEFINITION'): pass class InvalidSchemaDefinition(ProgrammingError, code='42P15', name='INVALID_SCHEMA_DEFINITION'): pass class InvalidTableDefinition(ProgrammingError, code='42P16', name='INVALID_TABLE_DEFINITION'): pass class InvalidObjectDefinition(ProgrammingError, code='42P17', name='INVALID_OBJECT_DEFINITION'): pass class IndeterminateDatatype(ProgrammingError, code='42P18', name='INDETERMINATE_DATATYPE'): pass class InvalidRecursion(ProgrammingError, code='42P19', name='INVALID_RECURSION'): pass class WindowingError(ProgrammingError, code='42P20', name='WINDOWING_ERROR'): pass class CollationMismatch(ProgrammingError, code='42P21', name='COLLATION_MISMATCH'): pass class IndeterminateCollation(ProgrammingError, code='42P22', name='INDETERMINATE_COLLATION'): pass # Class 44 - WITH CHECK OPTION Violation class WithCheckOptionViolation(ProgrammingError, code='44000', name='WITH_CHECK_OPTION_VIOLATION'): pass # Class 53 - Insufficient Resources class InsufficientResources(OperationalError, code='53000', name='INSUFFICIENT_RESOURCES'): pass class DiskFull(OperationalError, code='53100', name='DISK_FULL'): pass class OutOfMemory(OperationalError, code='53200', name='OUT_OF_MEMORY'): pass class TooManyConnections(OperationalError, code='53300', name='TOO_MANY_CONNECTIONS'): pass class ConfigurationLimitExceeded(OperationalError, code='53400', name='CONFIGURATION_LIMIT_EXCEEDED'): pass # Class 54 - Program Limit Exceeded class ProgramLimitExceeded(OperationalError, code='54000', name='PROGRAM_LIMIT_EXCEEDED'): pass class StatementTooComplex(OperationalError, code='54001', name='STATEMENT_TOO_COMPLEX'): pass class TooManyColumns(OperationalError, code='54011', name='TOO_MANY_COLUMNS'): pass class TooManyArguments(OperationalError, code='54023', name='TOO_MANY_ARGUMENTS'): pass # Class 55 - Object Not In Prerequisite State class ObjectNotInPrerequisiteState(OperationalError, code='55000', name='OBJECT_NOT_IN_PREREQUISITE_STATE'): pass class ObjectInUse(OperationalError, code='55006', name='OBJECT_IN_USE'): pass class CantChangeRuntimeParam(OperationalError, code='55P02', name='CANT_CHANGE_RUNTIME_PARAM'): pass class LockNotAvailable(OperationalError, code='55P03', name='LOCK_NOT_AVAILABLE'): pass class UnsafeNewEnumValueUsage(OperationalError, code='55P04', name='UNSAFE_NEW_ENUM_VALUE_USAGE'): pass # Class 57 - Operator Intervention class OperatorIntervention(OperationalError, code='57000', name='OPERATOR_INTERVENTION'): pass class QueryCanceled(OperationalError, code='57014', name='QUERY_CANCELED'): pass class AdminShutdown(OperationalError, code='57P01', name='ADMIN_SHUTDOWN'): pass class CrashShutdown(OperationalError, code='57P02', name='CRASH_SHUTDOWN'): pass class CannotConnectNow(OperationalError, code='57P03', name='CANNOT_CONNECT_NOW'): pass class DatabaseDropped(OperationalError, code='57P04', name='DATABASE_DROPPED'): pass class IdleSessionTimeout(OperationalError, code='57P05', name='IDLE_SESSION_TIMEOUT'): pass # Class 58 - System Error (errors external to PostgreSQL itself) class SystemError(OperationalError, code='58000', name='SYSTEM_ERROR'): pass class IoError(OperationalError, code='58030', name='IO_ERROR'): pass class UndefinedFile(OperationalError, code='58P01', name='UNDEFINED_FILE'): pass class DuplicateFile(OperationalError, code='58P02', name='DUPLICATE_FILE'): pass # Class 72 - Snapshot Failure class SnapshotTooOld(DatabaseError, code='72000', name='SNAPSHOT_TOO_OLD'): pass # Class F0 - Configuration File Error class ConfigFileError(OperationalError, code='F0000', name='CONFIG_FILE_ERROR'): pass class LockFileExists(OperationalError, code='F0001', name='LOCK_FILE_EXISTS'): pass # Class HV - Foreign Data Wrapper Error (SQL/MED) class FdwError(OperationalError, code='HV000', name='FDW_ERROR'): pass class FdwOutOfMemory(OperationalError, code='HV001', name='FDW_OUT_OF_MEMORY'): pass class FdwDynamicParameterValueNeeded(OperationalError, code='HV002', name='FDW_DYNAMIC_PARAMETER_VALUE_NEEDED'): pass class FdwInvalidDataType(OperationalError, code='HV004', name='FDW_INVALID_DATA_TYPE'): pass class FdwColumnNameNotFound(OperationalError, code='HV005', name='FDW_COLUMN_NAME_NOT_FOUND'): pass class FdwInvalidDataTypeDescriptors(OperationalError, code='HV006', name='FDW_INVALID_DATA_TYPE_DESCRIPTORS'): pass class FdwInvalidColumnName(OperationalError, code='HV007', name='FDW_INVALID_COLUMN_NAME'): pass class FdwInvalidColumnNumber(OperationalError, code='HV008', name='FDW_INVALID_COLUMN_NUMBER'): pass class FdwInvalidUseOfNullPointer(OperationalError, code='HV009', name='FDW_INVALID_USE_OF_NULL_POINTER'): pass class FdwInvalidStringFormat(OperationalError, code='HV00A', name='FDW_INVALID_STRING_FORMAT'): pass class FdwInvalidHandle(OperationalError, code='HV00B', name='FDW_INVALID_HANDLE'): pass class FdwInvalidOptionIndex(OperationalError, code='HV00C', name='FDW_INVALID_OPTION_INDEX'): pass class FdwInvalidOptionName(OperationalError, code='HV00D', name='FDW_INVALID_OPTION_NAME'): pass class FdwOptionNameNotFound(OperationalError, code='HV00J', name='FDW_OPTION_NAME_NOT_FOUND'): pass class FdwReplyHandle(OperationalError, code='HV00K', name='FDW_REPLY_HANDLE'): pass class FdwUnableToCreateExecution(OperationalError, code='HV00L', name='FDW_UNABLE_TO_CREATE_EXECUTION'): pass class FdwUnableToCreateReply(OperationalError, code='HV00M', name='FDW_UNABLE_TO_CREATE_REPLY'): pass class FdwUnableToEstablishConnection(OperationalError, code='HV00N', name='FDW_UNABLE_TO_ESTABLISH_CONNECTION'): pass class FdwNoSchemas(OperationalError, code='HV00P', name='FDW_NO_SCHEMAS'): pass class FdwSchemaNotFound(OperationalError, code='HV00Q', name='FDW_SCHEMA_NOT_FOUND'): pass class FdwTableNotFound(OperationalError, code='HV00R', name='FDW_TABLE_NOT_FOUND'): pass class FdwFunctionSequenceError(OperationalError, code='HV010', name='FDW_FUNCTION_SEQUENCE_ERROR'): pass class FdwTooManyHandles(OperationalError, code='HV014', name='FDW_TOO_MANY_HANDLES'): pass class FdwInconsistentDescriptorInformation(OperationalError, code='HV021', name='FDW_INCONSISTENT_DESCRIPTOR_INFORMATION'): pass class FdwInvalidAttributeValue(OperationalError, code='HV024', name='FDW_INVALID_ATTRIBUTE_VALUE'): pass class FdwInvalidStringLengthOrBufferLength(OperationalError, code='HV090', name='FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH'): pass class FdwInvalidDescriptorFieldIdentifier(OperationalError, code='HV091', name='FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER'): pass # Class P0 - PL/pgSQL Error class PlpgsqlError(ProgrammingError, code='P0000', name='PLPGSQL_ERROR'): pass class RaiseException(ProgrammingError, code='P0001', name='RAISE_EXCEPTION'): pass class NoDataFound(ProgrammingError, code='P0002', name='NO_DATA_FOUND'): pass class TooManyRows(ProgrammingError, code='P0003', name='TOO_MANY_ROWS'): pass class AssertFailure(ProgrammingError, code='P0004', name='ASSERT_FAILURE'): pass # Class XX - Internal Error class InternalError_(InternalError, code='XX000', name='INTERNAL_ERROR'): pass class DataCorrupted(InternalError, code='XX001', name='DATA_CORRUPTED'): pass class IndexCorrupted(InternalError, code='XX002', name='INDEX_CORRUPTED'): pass # autogenerated: end # fmt: on # Don't show a complete traceback upon raising these exception. # Usually the traceback starts from internal functions (for instance in the # server communication callbacks) but, for the end user, it's more important # to get the high level information about where the exception was raised, for # instance in a certain `Cursor.execute()`. _NO_TRACEBACK = (Error, KeyboardInterrupt, CancelledError)