1. 程式人生 > >PostgreSQL 資料庫錯誤程式碼解釋

PostgreSQL 資料庫錯誤程式碼解釋

PostgreSQL 伺服器發出的所有訊息都賦予了五個字元 的錯誤程式碼, 這些程式碼遵循 SQL 的 "SQLSTATE" 程式碼的習慣。需要知道發生了什麼錯誤條件的應用通常應該測試錯誤程式碼, 而不是檢視文字錯誤資訊。這些錯誤 程式碼輕易不會隨著 PostgreSQL 的版本更新而修改, 並且一般也不會隨著錯誤資訊的本地化而發生修改。 請注意有些,但不是全部,PostgreSQL 生成的錯誤程式碼是由 SQL 標準定義的; 有些標準沒有定義的錯誤條件是我們發明的或者是從其它資料庫借來的。
根據標準,錯誤程式碼的頭兩個字元表示錯誤類別,而後三個字元表示在該 類別內特定的條件。 因此,那些不能識別特定錯誤程式碼的應用仍然可以從錯誤類別中推斷要做什麼。 Table A-1  裡面列出了 PostgreSQL 8.1 定義的所有錯誤程式碼。(有些實際上目前並沒有使用,但是 SQL 標準定義了。) 錯誤類別也列出在此。對於每個錯誤類別都有個"標準"的錯誤程式碼, 它的最後三個字元是 000。這個程式碼只用於那些落在該類別內, 但是沒有賦予任何更準確的程式碼的錯誤條件。
PL/pgSQL 用於每個錯誤程式碼的條件名和表中顯示的措辭相同, 只是用下劃線代替了空白。比如,程式碼 22012,DIVISION BY ZERO, 它的條件名是 DIVISION_BY_ZERO。條件名可以用大寫或者小寫來寫都可以。 (請注意 PL/pgSQL 並不識別警告,這一點和錯誤,條件名正相反; 那些類別是 00,01,和 02。) 程式碼 含義  00 類 成功完成  00000 成功完成(SUCCESSFUL COMPLETION) 
01 類 警告  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)  02 類 沒有資料 — 按照 SQL 標準的要求,這也是警告類  02000 沒有資料(NO DATA)  02001 返回了沒有附加動態結果集(NO ADDITIONAL DYNAMIC RESULT SETS RETURNED)  03 類 SQL 語句尚未結束  03000 SQL 語句尚未結束(SQL STATEMENT NOT YET COMPLETE)  08 類 連線例外  08000 連線例外(CONNECTION EXCEPTION)  08003 連線不存在(CONNECTION DOES NOT EXIST)  08006 連線失敗(CONNECTION FAILURE)  08001 SQL 客戶端不能建立 SQL 連線(SQLCLIENT UNABLE TO ESTABLISH SQLCONNECTION)  08004 SQL 伺服器拒絕建立 SQL 連線(SQLSERVER REJECTED ESTABLISHMENT OF SQLCONNECTION)  08007 未知的事務解析(TRANSACTION RESOLUTION UNKNOWN)  08P01 違反協議(PROTOCOL VIOLATION)  09 類 觸發器動作列外  09000 觸發的動作例外(TRIGGERED ACTION EXCEPTION)  0A 類 不支援特性  0A000 不支援此特性(FEATURE NOT SUPPORTED)  0B 類 非法事務初始化  0B000 非法事務初始化(INVALID TRANSACTION INITIATION)  0F 類 指示器例外  0F000 指示器例外(LOCATOR EXCEPTION)  0F001 非法的定位器宣告(INVALID LOCATOR SPECIFICATION)  0L 類 非法賦權人  0L000 非法賦權人(INVALID GRANTOR)  0LP01 非法賦權操作(INVALID GRANT OPERATION)  0P 類 非法角色宣告  0P000 非法角色宣告(INVALID ROLE SPECIFICATION)  21 類 勢違反  21000 勢違反(CARDINALITY VIOLATION)  22 類 資料例外  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)  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)  22020 非法限制值(INVALID LIMIT VALUE)  22023 非法引數值(INVALID PARAMETER VALUE)  2201B 非法正則表示式(INVALID REGULAR EXPRESSION)  22009 非法時區顯示值(INVALID TIME ZONE DISPLACEMENT VALUE)  2200C 非法使用逃逸字元(INVALID USE OF ESCAPE CHARACTER)  2200G 最相關型別不匹配(MOST SPECIFIC TYPE MISMATCH)  22004 不允許 NULL 值(NULL VALUE NOT ALLOWED)  22002 NULL 值不能做指示器引數(NULL VALUE NO INDICATOR PARAMETER)  22003 數字值超出範圍(NUMERIC VALUE OUT OF RANGE)  22026 字串資料長度不匹配(STRING DATA LENGTH MISMATCH)  22001 字串資料右邊被截斷(STRING DATA RIGHT TRUNCATION)  22011 抽取子字串錯誤(SUBSTRING ERROR)  22027 截斷錯誤(TRIM ERROR)  22024 未結束的 C 字串(UNTERMINATED C STRING)  2200F 零長度的字串(ZERO LENGTH CHARACTER STRING)  22P01 浮點例外(FLOATING POINT EXCEPTION)  22P02 非法文字表現形式(INVALID TEXT REPRESENTATION)  22P03 非法二進位制表現形式(INVALID BINARY REPRESENTATION)  22P04 錯誤的 COPY 格式(BAD COPY FILE FORMAT)  22P05 不可翻譯字元(UNTRANSLATABLE CHARACTER)  23 類 違反完整性約束  23000 違反完整性約束(INTEGRITY CONSTRAINT VIOLATION)  23001 違反限制(RESTRICT VIOLATION)  23502 違反非空(NOT NULL VIOLATION)  23503 違反外來鍵約束(FOREIGN KEY VIOLATION)  23505 違反唯一約束(UNIQUE VIOLATION)  23514 違反檢查(CHECK VIOLATION)  24 類 非法遊標狀態  24000 非法遊標狀態(INVALID CURSOR STATE)  25 類 非法事務狀態  25000 非法事務狀態(INVALID TRANSACTION STATE)  25001 活躍的 SQL 狀態(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 分支事務沒有活躍的 SQL 事務(NO ACTIVE SQL TRANSACTION FOR BRANCH TRANSACTION)  25006 只讀的 SQL 事務(READ ONLY SQL TRANSACTION)  25007 不支援混和的模式和資料語句(SCHEMA AND DATA STATEMENT MIXING NOT SUPPORTED)  25P01 沒有活躍的 SQL 事務(NO ACTIVE SQL TRANSACTION)  25P02 在失敗的 SQL 事務中(IN FAILED SQL TRANSACTION)  26 類 非法 SQL 語句名  26000 非法 SQL 語句名(INVALID SQL STATEMENT NAME)  27 類 觸發的資料改變違規  27000 觸發的資料改變違規(TRIGGERED DATA CHANGE VIOLATION)  28 類 非法授權宣告  28000 非法授權宣告(INVALID AUTHORIZATION SPECIFICATION)  2B 類 依然存在依賴的優先順序描述符  2B000 依然存在依賴的優先順序描述符(DEPENDENT PRIVILEGE DESCRIPTORS STILL EXIST)  2BP01 依賴性物件仍然存在(DEPENDENT OBJECTS STILL EXIST)  2D 類 非法的事務終止  2D000 非法的事務終止(INVALID TRANSACTION TERMINATION)  2F 類 SQL 過程例外  2F000 SQL 過程例外(SQL ROUTINE EXCEPTION)  2F005 執行的函式沒有返回語句(FUNCTION EXECUTED NO RETURN STATEMENT)  2F002 不允許修改 SQL 資料(MODIFYING SQL DATA NOT PERMITTED)  2F003 企圖使用禁止的 SQL 語句(PROHIBITED SQL STATEMENT ATTEMPTED)  2F004 不允許讀取 SQL 資料(READING SQL DATA NOT PERMITTED)  34 類 非法遊標名  34000 非法遊標名(INVALID CURSOR NAME)  38 類 外部過程例外  38000 外部過程例外(EXTERNAL ROUTINE EXCEPTION)  38001 不允許包含的 SQL (CONTAINING SQL NOT PERMITTED)  38002 不允許修改 SQL 資料(MODIFYING SQL DATA NOT PERMITTED)  38003 企圖使用禁止的 SQL 語句(PROHIBITED SQL STATEMENT ATTEMPTED)  38004 不允許讀取 SQL 資料(READING SQL DATA NOT PERMITTED)  39 類 外部過程呼叫例外  39000 外部過程呼叫例外(EXTERNAL ROUTINE INVOCATION EXCEPTION)  39001 返回了非法的 SQLSTATE(INVALID SQLSTATE RETURNED)  39004 不允許空值(NULL VALUE NOT ALLOWED)  39P01 違反觸發器協議(TRIGGER PROTOCOL VIOLATED)  39P02 違反SRF協議(SRF PROTOCOL VIOLATED)  3B 類 儲存點例外  3B000 儲存點例外(SAVEPOINT EXCEPTION)  3B001 無效的儲存點宣告(INVALID SAVEPOINT SPECIFICATION)  3D 類 非法資料庫名  3D000 非法資料庫名(INVALID CATALOG NAME)  3F 類 非法模式名  3F000 非法模式名(INVALID SCHEMA NAME)  40 類 事務回滾  40000 事務回滾(TRANSACTION ROLLBACK)  40002 違反事務完整性約束(TRANSACTION INTEGRITY CONSTRAINT VIOLATION)  40001 序列化失敗(SERIALIZATION FAILURE)  40003 不知道語句是否結束(STATEMENT COMPLETION UNKNOWN)  40P01 偵測到死鎖(DEADLOCK DETECTED)  42 類 語法錯誤或者違反訪問規則  42000 語法錯誤或者違反訪問規則(SYNTAX ERROR OR ACCESS RULE VIOLATION)  42601 語法錯誤(SYNTAX ERROR)  42501 許可權不夠(INSUFFICIENT PRIVILEGE)  42846 無法進行型別轉換(CANNOT COERCE)  42803 分組錯誤(GROUPING ERROR)  42830 非法的外來鍵(INVALID FOREIGN KEY)  42602 非法名字(INVALID NAME)  42622 名字太長(NAME TOO LONG)  42939 保留名字(RESERVED NAME)  42804 資料型別不匹配(DATATYPE MISMATCH)  42P18 未決的資料型別(INDETERMINATE DATATYPE)  42809 錯誤的物件型別(WRONG OBJECT TYPE)  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)  44 類 違反 WITH CHECK 選項  44000 違反 WITH CHECK 選項(WITH CHECK OPTION VIOLATION)  53 類 資源不夠  53000 資源不夠(INSUFFICIENT RESOURCES)  53100 磁碟滿(DISK FULL)  53200 記憶體耗盡(OUT OF MEMORY)  53300 太多連線(TOO MANY CONNECTIONS)  54 類 超過程式限制  54000 超過程式限制(PROGRAM LIMIT EXCEEDED)  54001 語句太複雜(STATEMENT TOO COMPLEX)  54011 太多欄位(TOO MANY COLUMNS)  54023 引數太多(TOO MANY ARGUMENTS)  55 類 物件不在預先要求的狀態  55000 物件不在預先要求的狀態(OBJECT NOT IN PREREQUISITE STATE)  55006 物件在使用中(OBJECT IN USE)  55P02 無法修改執行時引數(CANT CHANGE RUNTIME PARAM)  55P03 鎖不可獲得(LOCK NOT AVAILABLE)  57 類 操作者干涉  57000 操作者干涉(OPERATOR INTERVENTION)  57014 查詢被取消(QUERY CANCELED)  57P01 管理員關機(ADMIN SHUTDOWN)  57P02 崩潰關機(CRASH SHUTDOWN)  57P03 現在無法連線(CANNOT CONNECT NOW)  58 類 系統錯誤( PostgreSQL 自己內部的錯誤)  58030 IO 錯誤(IO ERROR)  58P01 未定義的檔案(UNDEFINED FILE)  58P02 重複的檔案(DUPLICATE FILE)  F0 類 配置檔案錯誤  F0000 配置檔案錯誤(CONFIG FILE ERROR)  F0001 鎖檔案存在(LOCK FILE EXISTS)  P0 類 PL/pgSQL 錯誤  P0000 PLPGSQL 錯誤(PLPGSQL ERROR)  P0001 丟擲例外(RAISE EXCEPTION)  XX 類 內部錯誤  XX000 內部錯誤(INTERNAL ERROR)  XX001 資料損壞(DATA CORRUPTED)  XX002 索引損壞(INDEX CORRUPTED)