44
55class PostgresError
66{
7+ // Class 00 - Successful Completion
78 const SUCCESSFUL_COMPLETION = '00000 ' ;
9+
10+ // Class 01 - Warning
811 const WARNING = '01000 ' ;
912 const DYNAMIC_RESULT_SETS_RETURNED = '0100C ' ;
1013 const IMPLICIT_ZERO_BIT_PADDING = '01008 ' ;
@@ -13,28 +16,54 @@ class PostgresError
1316 const PRIVILEGE_NOT_REVOKED = '01006 ' ;
1417 const STRING_DATA_RIGHT_TRUNCATION = '01004 ' ;
1518 const DEPRECATED_FEATURE = '01P01 ' ;
19+
20+ // Class 02 - No Data (this is also a warning class per the SQL standard)
1621 const NO_DATA = '02000 ' ;
1722 const NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED = '02001 ' ;
23+
24+ // Class 03 - SQL Statement Not Yet Complete
1825 const SQL_STATEMENT_NOT_YET_COMPLETE = '03000 ' ;
26+
27+ // Class 08 - Connection Exception
1928 const CONNECTION_EXCEPTION = '08000 ' ;
2029 const CONNECTION_DOES_NOT_EXIST = '08003 ' ;
2130 const CONNECTION_FAILURE = '08006 ' ;
2231 const SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION = '08001 ' ;
2332 const SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION = '08004 ' ;
2433 const TRANSACTION_RESOLUTION_UNKNOWN = '08007 ' ;
2534 const PROTOCOL_VIOLATION = '08P01 ' ;
35+
36+ // Class 09 - Triggered Action Exception
2637 const TRIGGERED_ACTION_EXCEPTION = '09000 ' ;
38+
39+ // Class 0A - Feature Not Supported
2740 const FEATURE_NOT_SUPPORTED = '0A000 ' ;
41+
42+ // Class 0B - Invalid Transaction Initiation
2843 const INVALID_TRANSACTION_INITIATION = '0B000 ' ;
44+
45+ // Class 0F - Locator Exception
2946 const LOCATOR_EXCEPTION = '0F000 ' ;
3047 const INVALID_LOCATOR_SPECIFICATION = '0F001 ' ;
48+
49+ // Class 0L - Invalid Grantor
3150 const INVALID_GRANTOR = '0L000 ' ;
3251 const INVALID_GRANT_OPERATION = '0LP01 ' ;
52+
53+ // Class 0P - Invalid Role Specification
3354 const INVALID_ROLE_SPECIFICATION = '0P000 ' ;
55+
56+ // Class 0Z - Diagnostics Exception
3457 const DIAGNOSTICS_EXCEPTION = '0Z000 ' ;
3558 const STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER = '0Z002 ' ;
59+
60+ // Class 20 - Case Not Found
3661 const CASE_NOT_FOUND = '20000 ' ;
62+
63+ // Class 21 - Cardinality Violation
3764 const CARDINALITY_VIOLATION = '21000 ' ;
65+
66+ // Class 22 - Data Exception
3867 const DATA_EXCEPTION = '22000 ' ;
3968 const ARRAY_SUBSCRIPT_ERROR = '2202E ' ;
4069 const CHARACTER_NOT_IN_REPERTOIRE = '22021 ' ;
@@ -102,14 +131,20 @@ class PostgresError
102131 const TOO_MANY_JSON_ARRAY_ELEMENTS = '2203D ' ;
103132 const TOO_MANY_JSON_OBJECT_MEMBERS = '2203E ' ;
104133 const SQL_JSON_SCALAR_REQUIRED = '2203F ' ;
134+
135+ // Class 23 - Integrity Constraint Violation
105136 const INTEGRITY_CONSTRAINT_VIOLATION = '23000 ' ;
106137 const RESTRICT_VIOLATION = '23001 ' ;
107138 const NOT_NULL_VIOLATION = '23502 ' ;
108139 const FOREIGN_KEY_VIOLATION = '23503 ' ;
109140 const UNIQUE_VIOLATION = '23505 ' ;
110141 const CHECK_VIOLATION = '23514 ' ;
111142 const EXCLUSION_VIOLATION = '23P01 ' ;
143+
144+ // Class 24 - Invalid Cursor State
112145 const INVALID_CURSOR_STATE = '24000 ' ;
146+
147+ // Class 25 - Invalid Transaction State
113148 const INVALID_TRANSACTION_STATE = '25000 ' ;
114149 const ACTIVE_SQL_TRANSACTION = '25001 ' ;
115150 const BRANCH_TRANSACTION_ALREADY_ACTIVE = '25002 ' ;
@@ -122,39 +157,67 @@ class PostgresError
122157 const NO_ACTIVE_SQL_TRANSACTION = '25P01 ' ;
123158 const IN_FAILED_SQL_TRANSACTION = '25P02 ' ;
124159 const IDLE_IN_TRANSACTION_SESSION_TIMEOUT = '25P03 ' ;
160+
161+ // Class 26 - Invalid SQL Statement Name
125162 const INVALID_SQL_STATEMENT_NAME = '26000 ' ;
163+
164+ // Class 27 - Triggered Data Change Violation
126165 const TRIGGERED_DATA_CHANGE_VIOLATION = '27000 ' ;
166+
167+ // Class 28 - Invalid Authorization Specification
127168 const INVALID_AUTHORIZATION_SPECIFICATION = '28000 ' ;
128169 const INVALID_PASSWORD = '28P01 ' ;
170+
171+ // Class 2B - Dependent Privilege Descriptors Still Exist
129172 const DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST = '2B000 ' ;
130173 const DEPENDENT_OBJECTS_STILL_EXIST = '2BP01 ' ;
174+
175+ // Class 2D - Invalid Transaction Termination
131176 const INVALID_TRANSACTION_TERMINATION = '2D000 ' ;
177+
178+ // Class 2F - SQL Routine Exception
132179 const SQL_ROUTINE_EXCEPTION = '2F000 ' ;
133180 const FUNCTION_EXECUTED_NO_RETURN_STATEMENT = '2F005 ' ;
134181 const MODIFYING_SQL_DATA_NOT_PERMITTED = '2F002 ' ;
135182 const PROHIBITED_SQL_STATEMENT_ATTEMPTED = '2F003 ' ;
136183 const READING_SQL_DATA_NOT_PERMITTED = '2F004 ' ;
184+
185+ // Class 34 - Invalid Cursor Name
137186 const INVALID_CURSOR_NAME = '34000 ' ;
187+
188+ // Class 38 - External Routine Exception
138189 const EXTERNAL_ROUTINE_EXCEPTION = '38000 ' ;
139190 const CONTAINING_SQL_NOT_PERMITTED = '38001 ' ;
140191 const MODIFYING_SQL_DATA_NOT_PERMITTED_EXCEPTION = '38002 ' ;
141192 const PROHIBITED_SQL_STATEMENT_ATTEMPTED_EXCEPTION = '38003 ' ;
142193 const READING_SQL_DATA_NOT_PERMITTED_EXCEPTION = '38004 ' ;
194+
195+ // Class 39 - External Routine Invocation Exception
143196 const EXTERNAL_ROUTINE_INVOCATION_EXCEPTION = '39000 ' ;
144197 const INVALID_SQLSTATE_RETURNED = '39001 ' ;
145198 const NULL_VALUE_NOT_ALLOWED_EXCEPTION = '39004 ' ;
146199 const TRIGGER_PROTOCOL_VIOLATED = '39P01 ' ;
147200 const SRF_PROTOCOL_VIOLATED = '39P02 ' ;
148201 const EVENT_TRIGGER_PROTOCOL_VIOLATED = '39P03 ' ;
202+
203+ // Class 3B - Savepoint Exception
149204 const SAVEPOINT_EXCEPTION = '3B000 ' ;
150205 const INVALID_SAVEPOINT_SPECIFICATION = '3B001 ' ;
206+
207+ // Class 3D - Invalid Catalog Name
151208 const INVALID_CATALOG_NAME = '3D000 ' ;
209+
210+ // Class 3F - Invalid Schema Name
152211 const INVALID_SCHEMA_NAME = '3F000 ' ;
212+
213+ // Class 40 - Transaction Rollback
153214 const TRANSACTION_ROLLBACK = '40000 ' ;
154215 const TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION = '40002 ' ;
155216 const SERIALIZATION_FAILURE = '40001 ' ;
156217 const STATEMENT_COMPLETION_UNKNOWN = '40003 ' ;
157218 const DEADLOCK_DETECTED = '40P01 ' ;
219+
220+ // Class 42 - Syntax Error or Access Rule Violation
158221 const SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION = '42000 ' ;
159222 const SYNTAX_ERROR = '42601 ' ;
160223 const INSUFFICIENT_PRIVILEGE = '42501 ' ;
@@ -199,35 +262,53 @@ class PostgresError
199262 const INVALID_SCHEMA_DEFINITION = '42P15 ' ;
200263 const INVALID_TABLE_DEFINITION = '42P16 ' ;
201264 const INVALID_OBJECT_DEFINITION = '42P17 ' ;
265+
266+ // Class 44 - WITH CHECK OPTION Violation
202267 const WITH_CHECK_OPTION_VIOLATION = '44000 ' ;
268+
269+ // Class 53 - Insufficient Resources
203270 const INSUFFICIENT_RESOURCES = '53000 ' ;
204271 const DISK_FULL = '53100 ' ;
205272 const OUT_OF_MEMORY = '53200 ' ;
206273 const TOO_MANY_CONNECTIONS = '53300 ' ;
207274 const CONFIGURATION_LIMIT_EXCEEDED = '53400 ' ;
275+
276+ // Class 54 - Program Limit Exceeded
208277 const PROGRAM_LIMIT_EXCEEDED = '54000 ' ;
209278 const STATEMENT_TOO_COMPLEX = '54001 ' ;
210279 const TOO_MANY_COLUMNS = '54011 ' ;
211280 const TOO_MANY_ARGUMENTS = '54023 ' ;
281+
282+ // Class 55 - Object Not In Prerequisite State
212283 const OBJECT_NOT_IN_PREREQUISITE_STATE = '55000 ' ;
213284 const OBJECT_IN_USE = '55006 ' ;
214285 const CANT_CHANGE_RUNTIME_PARAM = '55P02 ' ;
215286 const LOCK_NOT_AVAILABLE = '55P03 ' ;
216287 const UNSAFE_NEW_ENUM_VALUE_USAGE = '55P04 ' ;
288+
289+ // Class 57 - Operator Intervention
217290 const OPERATOR_INTERVENTION = '57000 ' ;
218291 const QUERY_CANCELED = '57014 ' ;
219292 const ADMIN_SHUTDOWN = '57P01 ' ;
220293 const CRASH_SHUTDOWN = '57P02 ' ;
221294 const CANNOT_CONNECT_NOW = '57P03 ' ;
222295 const DATABASE_DROPPED = '57P04 ' ;
223296 const IDLE_SESSION_TIMEOUT = '57P05 ' ;
297+
298+ // Class 58 - System Error (errors external to PostgreSQL itself)
224299 const SYSTEM_ERROR = '58000 ' ;
225300 const IO_ERROR = '58030 ' ;
226301 const UNDEFINED_FILE = '58P01 ' ;
227302 const DUPLICATE_FILE = '58P02 ' ;
303+
304+ // Class 72 - Snapshot Failure
228305 const SNAPSHOT_TOO_OLD = '72000 ' ;
306+
307+ // Class F0 - Configuration File Error
229308 const CONFIG_FILE_ERROR = 'F0000 ' ;
230309 const LOCK_FILE_EXISTS = 'F0001 ' ;
310+
311+ // Class HV - Foreign Data Wrapper Error (SQL/MED)
231312 const FDW_ERROR = 'HV000 ' ;
232313 const FDW_COLUMN_NAME_NOT_FOUND = 'HV005 ' ;
233314 const FDW_DYNAMIC_PARAMETER_VALUE_NEEDED = 'HV002 ' ;
@@ -255,11 +336,15 @@ class PostgresError
255336 const FDW_UNABLE_TO_CREATE_EXECUTION = 'HV00L ' ;
256337 const FDW_UNABLE_TO_CREATE_REPLY = 'HV00M ' ;
257338 const FDW_UNABLE_TO_ESTABLISH_CONNECTION = 'HV00N ' ;
339+
340+ // Class P0 - PL/pgSQL Error
258341 const PLPGSQL_ERROR = 'P0000 ' ;
259342 const RAISE_EXCEPTION = 'P0001 ' ;
260343 const NO_DATA_FOUND = 'P0002 ' ;
261344 const TOO_MANY_ROWS = 'P0003 ' ;
262345 const ASSERT_FAILURE = 'P0004 ' ;
346+
347+ // Class XX - Internal Error
263348 const INTERNAL_ERROR = 'XX000 ' ;
264349 const DATA_CORRUPTED = 'XX001 ' ;
265350 const INDEX_CORRUPTED = 'XX002 ' ;
0 commit comments