#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
using System;
using System.Linq;
namespace Npgsql;
///
/// Provides constants for PostgreSQL error codes.
///
///
/// See https://www.postgresql.org/docs/current/static/errcodes-appendix.html
///
public static class PostgresErrorCodes
{
#region Class 00 - Successful Completion
public const string SuccessfulCompletion = "00000";
#endregion Class 00 - Successful Completion
#region Class 01 - Warning
public const string Warning = "01000";
public const string DynamicResultSetsReturnedWarning = "0100C";
public const string ImplicitZeroBitPaddingWarning = "01008";
public const string NullValueEliminatedInSetFunctionWarning = "01003";
public const string PrivilegeNotGrantedWarning = "01007";
public const string PrivilegeNotRevokedWarning = "01006";
public const string StringDataRightTruncationWarning = "01004";
public const string DeprecatedFeatureWarning = "01P01";
#endregion Class 01 - Warning
#region Class 02 - No Data
public const string NoData = "02000";
public const string NoAdditionalDynamicResultSetsReturned = "02001";
#endregion Class 02 - No Data
#region Class 03 - SQL Statement Not Yet Complete
public const string SqlStatementNotYetComplete = "03000";
#endregion Class 03 - SQL Statement Not Yet Complete
#region Class 08 - Connection Exception
public const string ConnectionException = "08000";
public const string ConnectionDoesNotExist = "08003";
public const string ConnectionFailure = "08006";
public const string SqlClientUnableToEstablishSqlConnection = "08001";
public const string SqlServerRejectedEstablishmentOfSqlConnection = "08004";
public const string TransactionResolutionUnknown = "08007";
public const string ProtocolViolation = "08P01";
#endregion Class 08 - Connection Exception
#region Class 09 - Triggered Action Exception
public const string TriggeredActionException = "09000";
#endregion Class 09 - Triggered Action Exception
#region Class 0A - Feature Not Supported
public const string FeatureNotSupported = "0A000";
#endregion Class 0A - Feature Not Supported
#region Class 0B - Invalid Transaction Initiation
public const string InvalidTransactionInitiation = "0B000";
#endregion Class 0B - Invalid Transaction Initiation
#region Class 0F - Locator Exception
public const string LocatorException = "0F000";
public const string InvalidLocatorSpecification = "0F001";
#endregion Class 0F - Locator Exception
#region Class 0L - Invalid Grantor
public const string InvalidGrantor = "0L000";
public const string InvalidGrantOperation = "0LP01";
#endregion Class 0L - Invalid Grantor
#region Class 0P - Invalid Role Specification
public const string InvalidRoleSpecification = "0P000";
#endregion Class 0P - Invalid Role Specification
#region Class 0Z - Diagnostics Exception
public const string DiagnosticsException = "0Z000";
public const string StackedDiagnosticsAccessedWithoutActiveHandler = "0Z002";
#endregion Class 0Z - Diagnostics Exception
#region Class 20 - Case Not Found
public const string CaseNotFound = "20000";
#endregion Class 20 - Case Not Found
#region Class 21 - CardinalityViolation
public const string CardinalityViolation = "21000";
#endregion Class 21 - CardinalityViolation
#region Class 22 - Data Exception
public const string DataException = "22000";
public const string ArraySubscriptError = "2202E";
public const string CharacterNotInRepertoire = "22021";
public const string DatetimeFieldOverflow = "22008";
public const string DivisionByZero = "22012";
public const string ErrorInAssignment = "22005";
public const string EscapeCharacterConflict = "2200B";
public const string IndicatorOverflow = "22022";
public const string IntervalFieldOverflow = "22015";
public const string InvalidArgumentForLogarithm = "2201E";
public const string InvalidArgumentForNtileFunction = "22014";
public const string InvalidArgumentForNthValueFunction = "22016";
public const string InvalidArgumentForPowerFunction = "2201F";
public const string InvalidArgumentForWidthBucketFunction = "2201G";
public const string InvalidCharacterValueForCast = "22018";
public const string InvalidDatetimeFormat = "22007";
public const string InvalidEscapeCharacter = "22019";
public const string InvalidEscapeOctet = "2200D";
public const string InvalidEscapeSequence = "22025";
public const string NonstandardUseOfEscapeCharacter = "22P06";
public const string InvalidIndicatorParameterValue = "22010";
public const string InvalidParameterValue = "22023";
public const string InvalidRegularExpression = "2201B";
public const string InvalidRowCountInLimitClause = "2201W";
public const string InvalidRowCountInResultOffsetClause = "2201X";
public const string InvalidTablesampleArgument = "2202H";
public const string InvalidTablesampleRepeat = "2202G";
public const string InvalidTimeZoneDisplacementValue = "22009";
public const string InvalidUseOfEscapeCharacter = "2200C";
public const string MostSpecificTypeMismatch = "2200G";
public const string NullValueNotAllowed = "22004";
public const string NullValueNoIndicatorParameter = "22002";
public const string NumericValueOutOfRange = "22003";
public const string StringDataLengthMismatch = "22026";
public const string StringDataRightTruncation = "22001";
public const string SubstringError = "22011";
public const string TrimError = "22027";
public const string UnterminatedCString = "22024";
public const string ZeroLengthCharacterString = "2200F";
public const string FloatingPointException = "22P01";
public const string InvalidTextRepresentation = "22P02";
public const string InvalidBinaryRepresentation = "22P03";
public const string BadCopyFileFormat = "22P04";
public const string UntranslatableCharacter = "22P05";
public const string NotAnXmlDocument = "2200L";
public const string InvalidXmlDocument = "2200M";
public const string InvalidXmlContent = "2200N";
public const string InvalidXmlComment = "2200S";
public const string InvalidXmlProcessingInstruction = "2200T";
#endregion Class 22 - Data Exception
#region Class 23 - Integrity Constraint Violation
public const string IntegrityConstraintViolation = "23000";
public const string RestrictViolation = "23001";
public const string NotNullViolation = "23502";
public const string ForeignKeyViolation = "23503";
public const string UniqueViolation = "23505";
public const string CheckViolation = "23514";
public const string ExclusionViolation = "23P01";
#endregion Class 23 - Integrity Constraint Violation
#region Class 24 - Invalid Cursor State
public const string InvalidCursorState = "24000";
#endregion Class 24 - Invalid Cursor State
#region Class 25 - Invalid Transaction State
public const string InvalidTransactionState = "25000";
public const string ActiveSqlTransaction = "25001";
public const string BranchTransactionAlreadyActive = "25002";
public const string HeldCursorRequiresSameIsolationLevel = "25008";
public const string InappropriateAccessModeForBranchTransaction = "25003";
public const string InappropriateIsolationLevelForBranchTransaction = "25004";
public const string NoActiveSqlTransactionForBranchTransaction = "25005";
public const string ReadOnlySqlTransaction = "25006";
public const string SchemaAndDataStatementMixingNotSupported = "25007";
public const string NoActiveSqlTransaction = "25P01";
public const string InFailedSqlTransaction = "25P02";
#endregion Class 25 - Invalid Transaction State
#region Class 26 - Invalid SQL Statement Name
public const string InvalidSqlStatementName = "26000";
#endregion Class 26 - Invalid SQL Statement Name
#region Class 27 - Triggered Data Change Violation
public const string TriggeredDataChangeViolation = "27000";
#endregion Class 27 - Triggered Data Change Violation
#region Class 28 - Invalid Authorization Scheme
public const string InvalidAuthorizationSpecification = "28000";
public const string InvalidPassword = "28P01";
#endregion Class 28 - Invalid Authorization Scheme
#region Class 2B - Dependent Privilege Descriptors Still Exist
public const string DependentPrivilegeDescriptorsStillExist = "2B000";
public const string DependentObjectsStillExist = "2BP01";
#endregion Class 2B - Dependent Privilege Descriptors Still Exist
#region Class 2D - Invalid Transaction Termination
public const string InvalidTransactionTermination = "2D000";
#endregion Class 2D - Invalid Transaction Termination
#region Class 2F - SQL Routine Exception
public const string SqlRoutineException = "2F000";
public const string FunctionExecutedNoReturnStatementSqlRoutineException = "2F005";
public const string ModifyingSqlDataNotPermittedSqlRoutineException = "2F002";
public const string ProhibitedSqlStatementAttemptedSqlRoutineException = "2F003";
public const string ReadingSqlDataNotPermittedSqlRoutineException = "2F004";
#endregion Class 2F - SQL Routine Exception
#region Class 34 - Invalid Cursor Name
public const string InvalidCursorName = "34000";
#endregion Class 34 - Invalid Cursor Name
#region Class 38 - External Routine Exception
public const string ExternalRoutineException = "38000";
public const string ContainingSqlNotPermittedExternalRoutineException = "38001";
public const string ModifyingSqlDataNotPermittedExternalRoutineException = "38002";
public const string ProhibitedSqlStatementAttemptedExternalRoutineException = "38003";
public const string ReadingSqlDataNotPermittedExternalRoutineException = "38004";
#endregion Class 38 - External Routine Exception
#region Class 39 - External Routine Invocation Exception
public const string ExternalRoutineInvocationException = "39000";
public const string InvalidSqlstateReturnedExternalRoutineInvocationException = "39001";
public const string NullValueNotAllowedExternalRoutineInvocationException = "39004";
public const string TriggerProtocolViolatedExternalRoutineInvocationException = "39P01";
public const string SrfProtocolViolatedExternalRoutineInvocationException = "39P02";
public const string EventTriggerProtocolViolatedExternalRoutineInvocationException = "39P03";
#endregion Class 39 - External Routine Invocation Exception
#region Class 3B - Savepoint Exception
public const string SavepointException = "3B000";
public const string InvalidSavepointSpecification = "3B001";
#endregion Class 3B - Savepoint Exception
#region Class 3D - Invalid Catalog Name
public const string InvalidCatalogName = "3D000";
#endregion Class 3D - Invalid Catalog Name
#region Class 3F - Invalid Schema Name
public const string InvalidSchemaName = "3F000";
#endregion Class 3F - Invalid Schema Name
#region Class 40 - Transaction Rollback
public const string TransactionRollback = "40000";
public const string TransactionIntegrityConstraintViolation = "40002";
public const string SerializationFailure = "40001";
public const string StatementCompletionUnknown = "40003";
public const string DeadlockDetected = "40P01";
#endregion Class 40 - Transaction Rollback
#region Class 42 - Syntax Error or Access Rule Violation
public const string SyntaxErrorOrAccessRuleViolation = "42000";
public const string SyntaxError = "42601";
public const string InsufficientPrivilege = "42501";
public const string CannotCoerce = "42846";
public const string GroupingError = "42803";
public const string WindowingError = "42P20";
public const string InvalidRecursion = "42P19";
public const string InvalidForeignKey = "42830";
public const string InvalidName = "42602";
public const string NameTooLong = "42622";
public const string ReservedName = "42939";
public const string DatatypeMismatch = "42804";
public const string IndeterminateDatatype = "42P18";
public const string CollationMismatch = "42P21";
public const string IndeterminateCollation = "42P22";
public const string WrongObjectType = "42809";
public const string UndefinedColumn = "42703";
public const string UndefinedFunction = "42883";
public const string UndefinedTable = "42P01";
public const string UndefinedParameter = "42P02";
public const string UndefinedObject = "42704";
public const string DuplicateColumn = "42701";
public const string DuplicateCursor = "42P03";
public const string DuplicateDatabase = "42P04";
public const string DuplicateFunction = "42723";
public const string DuplicatePreparedStatement = "42P05";
public const string DuplicateSchema = "42P06";
public const string DuplicateTable = "42P07";
public const string DuplicateAlias = "42712";
public const string DuplicateObject = "42710";
public const string AmbiguousColumn = "42702";
public const string AmbiguousFunction = "42725";
public const string AmbiguousParameter = "42P08";
public const string AmbiguousAlias = "42P09";
public const string InvalidColumnReference = "42P10";
public const string InvalidColumnDefinition = "42611";
public const string InvalidCursorDefinition = "42P11";
public const string InvalidDatabaseDefinition = "42P12";
public const string InvalidFunctionDefinition = "42P13";
public const string InvalidPreparedStatementDefinition = "42P14";
public const string InvalidSchemaDefinition = "42P15";
public const string InvalidTableDefinition = "42P16";
public const string InvalidObjectDefinition = "42P17";
#endregion Class 42 - Syntax Error or Access Rule Violation
#region Class 44 - WITH CHECK OPTION Violation
public const string WithCheckOptionViolation = "44000";
#endregion Class 44 - WITH CHECK OPTION Violation
#region Class 53 - Insufficient Resources
public const string InsufficientResources = "53000";
public const string DiskFull = "53100";
public const string OutOfMemory = "53200";
public const string TooManyConnections = "53300";
public const string ConfigurationLimitExceeded = "53400";
#endregion Class 53 - Insufficient Resources
#region Class 54 - Program Limit Exceeded
public const string ProgramLimitExceeded = "54000";
public const string StatementTooComplex = "54001";
public const string TooManyColumns = "54011";
public const string TooManyArguments = "54023";
#endregion Class 54 - Program Limit Exceeded
#region Class 55 - Object Not In Prerequisite State
public const string ObjectNotInPrerequisiteState = "55000";
public const string ObjectInUse = "55006";
public const string CantChangeRuntimeParam = "55P02";
public const string LockNotAvailable = "55P03";
#endregion Class 55 - Object Not In Prerequisite State
#region Class 57 - Operator Intervention
public const string OperatorIntervention = "57000";
public const string QueryCanceled = "57014";
public const string AdminShutdown = "57P01";
public const string CrashShutdown = "57P02";
public const string CannotConnectNow = "57P03";
public const string DatabaseDropped = "57P04";
#endregion Class 57 - Operator Intervention
#region Class 58 - System Error (errors external to PostgreSQL itself)
public const string SystemError = "58000";
public const string IoError = "58030";
public const string UndefinedFile = "58P01";
public const string DuplicateFile = "58P02";
#endregion Class 58 - System Error (errors external to PostgreSQL itself)
#region Class 72 - Snapshot Failure
public const string SnapshotFailure = "72000";
#endregion Class 72 - Snapshot Failure
#region Class F0 - Configuration File Error
public const string ConfigFileError = "F0000";
public const string LockFileExists = "F0001";
#endregion Class F0 - Configuration File Error
#region Class HV - Foreign Data Wrapper Error (SQL/MED)
public const string FdwError = "HV000";
public const string FdwColumnNameNotFound = "HV005";
public const string FdwDynamicParameterValueNeeded = "HV002";
public const string FdwFunctionSequenceError = "HV010";
public const string FdwInconsistentDescriptorInformation = "HV021";
public const string FdwInvalidAttributeValue = "HV024";
public const string FdwInvalidColumnName = "HV007";
public const string FdwInvalidColumnNumber = "HV008";
public const string FdwInvalidDataType = "HV004";
public const string FdwInvalidDataTypeDescriptors = "HV006";
public const string FdwInvalidDescriptorFieldIdentifier = "HV091";
public const string FdwInvalidHandle = "HV00B";
public const string FdwInvalidOptionIndex = "HV00C";
public const string FdwInvalidOptionName = "HV00D";
public const string FdwInvalidStringLengthOrBufferLength = "HV090";
public const string FdwInvalidStringFormat = "HV00A";
public const string FdwInvalidUseOfNullPointer = "HV009";
public const string FdwTooManyHandles = "HV014";
public const string FdwOutOfMemory = "HV001";
public const string FdwNoSchemas = "HV00P";
public const string FdwOptionNameNotFound = "HV00J";
public const string FdwReplyHandle = "HV00K";
public const string FdwSchemaNotFound = "HV00Q";
public const string FdwTableNotFound = "HV00R";
public const string FdwUnableToCreateExecution = "HV00L";
public const string FdwUnableToCreateReply = "HV00M";
public const string FdwUnableToEstablishConnection = "HV00N";
#endregion Class HV - Foreign Data Wrapper Error (SQL/MED)
#region Class P0 - PL/pgSQL Error
public const string PlpgsqlError = "P0000";
public const string RaiseException = "P0001";
public const string NoDataFound = "P0002";
public const string TooManyRows = "P0003";
public const string AssertFailure = "P0004";
#endregion Class P0 - PL/pgSQL Error
#region Class XX - Internal Error
public const string InternalError = "XX000";
public const string DataCorrupted = "XX001";
public const string IndexCorrupted = "XX002";
#endregion Class XX - Internal Error
static readonly string[] CriticalFailureCodes =
{
"53", // Insufficient resources
AdminShutdown, // Self explanatory
CrashShutdown, // Self explanatory
CannotConnectNow, // Database is starting up
"58", // System errors, external to PG (server is dying)
"F0", // Configuration file error
"XX", // Internal error (database is dying)
};
internal static bool IsCriticalFailure(PostgresException e, bool clusterError = true)
=> CriticalFailureCodes.Any(x => e.SqlState.StartsWith(x, StringComparison.Ordinal)) ||
!clusterError && e.SqlState == ProtocolViolation; // We only treat ProtocolViolation as critical for connection
}