A. PostgreSQL 錯誤代碼
所有由PostgreSQL伺服器回傳的訊息,都會搭配一個 5 個字元的錯誤代碼,這些代碼均以 SQL 標準的 SQLSTATE 代碼所定義。應用程式應該以錯誤代碼作為程式行為,而非處理文字的錯誤訊息。這些錯誤代碼會隨 PostgreSQL 版本發佈而微幅更新,但不會因為不同語言的文字訊息影響其定義。特別注意,部份錯誤代碼是以 SQL 標準的定義所制定,而有些錯誤代碼是額外制定的,以對應其他 SQL 標準未定義的使用情況。
標準來看,錯誤代碼的前 2 個字元代表著這個錯誤的類別,而後面 3 個字元則指出在此類別中更詳細的發生情況。所以,應用程式即使未完整支援特定的錯誤代碼,仍然可以依類別代碼瞭解大概發生了什麼事。
下方的 Table A.1 列出了所有在 PostgreSQL 10 中所定義的錯誤代碼。(部份錯誤代碼可能實際上沒有使用,但仍然依 SQL 標準所制定)每一個錯誤的類別都有一個"標準"的錯誤情況,其最後 3 個字元為 000,只用於在該類別未特別詳細定義的錯誤情況。
在"Condition Name"欄位中的內容將能在 PL/pgSQL 中被使用。Condition Name 不論大小寫字母均可合法使用。(特別注意,PL/pgSQL 並不支援 00、01 及 02 的錯誤類別。)
有一些錯誤訊息,其回傳內容是發生錯誤的資料庫物件名稱(表格 Table、表格欄位 Table column、資料型別 data type、限制條件 constraint)。舉例來說,如果產生了 unique_violation 錯誤,則會回傳某個限制條件名稱。這些訊息將會分別額外的欄位回傳,所以應用程式不需要特別解譯描述性的訊息內容。在 PostgreSQL 9.3之前,這種回傳方式僅限於 SQLSTATE 類別 23(違反限制條件的一致性 integrity constraint violation),日後將儘可能延伸支援到所有類別。
Table A.1. PostgreSQL Error Codes
Error Code | Condition Name |
Class 00 — Successful Completion | |
|
|
Class 01 — Warning | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class 02 — No Data (this is also a warning class per the SQL standard) | |
|
|
|
|
Class 03 — SQL Statement Not Yet Complete | |
|
|
Class 08 — Connection Exception | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class 09 — Triggered Action Exception | |
|
|
Class 0A — Feature Not Supported | |
|
|
Class 0B — Invalid Transaction Initiation | |
|
|
Class 0F — Locator Exception | |
|
|
|
|
Class 0L — Invalid Grantor | |
|
|
|
|
Class 0P — Invalid Role Specification | |
|
|
Class 0Z — Diagnostics Exception | |
|
|
|
|
Class 20 — Case Not Found | |
|
|
Class 21 — Cardinality Violation | |
|
|
Class 22 — Data Exception | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class 23 — Integrity Constraint Violation | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class 24 — Invalid Cursor State | |
|
|
Class 25 — Invalid Transaction State | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class 26 — Invalid SQL Statement Name | |
|
|
Class 27 — Triggered Data Change Violation | |
|
|
Class 28 — Invalid Authorization Specification | |
|
|
|
|
Class 2B — Dependent Privilege Descriptors Still Exist | |
|
|
|
|
Class 2D — Invalid Transaction Termination | |
|
|
Class 2F — SQL Routine Exception | |
|
|
|
|
|
|
|
|
|
|
Class 34 — Invalid Cursor Name | |
|
|
Class 38 — External Routine Exception | |
|
|
|
|
|
|
|
|
|
|
Class 39 — External Routine Invocation Exception | |
|
|
|
|
|
|
|
|
|
|
|
|
Class 3B — Savepoint Exception | |
|
|
|
|
Class 3D — Invalid Catalog Name | |
|
|
Class 3F — Invalid Schema Name | |
|
|
Class 40 — Transaction Rollback | |
|
|
|
|
|
|
|
|
|
|
Class 42 — Syntax Error or Access Rule Violation | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class 44 — WITH CHECK OPTION Violation | |
|
|
Class 53 — Insufficient Resources | |
|
|
|
|
|
|
|
|
|
|
Class 54 — Program Limit Exceeded | |
|
|
|
|
|
|
|
|
Class 55 — Object Not In Prerequisite State | |
|
|
|
|
|
|
|
|
|
|
Class 57 — Operator Intervention | |
|
|
|
|
|
|
|
|
|
|
|
|
Class 58 — System Error (errors external toPostgreSQLitself) | |
|
|
|
|
|
|
|
|
Class 72 — Snapshot Failure | |
|
|
Class F0 — Configuration File Error | |
|
|
|
|
Class HV — Foreign Data Wrapper Error (SQL/MED) | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Class P0 — PL/pgSQL Error | |
|
|
|
|
|
|
|
|
|
|
Class XX — Internal Error | |
|
|
|
|
|
|
Last updated