Appendix A. PostgreSQL 錯誤碼

PostgreSQL 伺服器發出的所有消息都賦予了五個字元 的錯誤代碼, 這些代碼遵循 SQL 的 "SQLSTATE" 代碼的習慣。需要知道發生了什麼錯誤條件的應用通常應該測試錯誤代碼, 而不是查看文本錯誤訊息。這些錯誤 代碼輕易不會隨著 PostgreSQL 的版本更新而修改, 並且一般也不會隨著錯誤訊息的本地化而發生修改。 請注意有些,但不是全部,PostgreSQL 生成的錯誤代碼是由 SQL 標準定義的; 有些標準沒有定義的錯誤條件是我們發明的或者是從其它資料庫借來的。

根據標準,錯誤代碼的頭兩個字元資料表示錯誤類別,而後三個字元資料表示在該 類別內特定的條件。 因此,那些不能識別特定錯誤代碼的應用仍然可以從錯誤類別中推斷要做什麼。

Table A-1 裡面列出了 PostgreSQL 8.0.0 定義的所有錯誤代碼。(有些實際上目前並沒有使用,但是 SQL 標準定義了。) 錯誤類別也列出在此。對於每個錯誤類別都有個"標準"的錯誤代碼, 它的最後三個字元是 000。這個代碼只用於那些落在該類別內, 但是沒有賦予任何更準確的代碼的錯誤條件。

PL/pgSQL 用於每個錯誤代碼的條件名和資料表中顯示的措辭相同, 只是用下劃線代替了空白。比如,代碼 22012,DIVISION BY ZERO, 它的條件名是 DIVISION_BY_ZERO。條件名可以用大寫或者小寫來寫都可以。 (請注意 PL/pgSQL 並不識別警告,這一點和錯誤,條件名正相反; 那些類別是 00,01,和 02。)

Table A-1. PostgreSQL 錯誤代碼

錯誤代碼含義
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:1999 的要求,這也是警告類
02000沒有資料(NO DATA)
02001返回了沒有附加動態結果集(NO ADDITIONAL DYNAMIC RESULT SETS RETURNED)
03 類SQL 語句尚未結束
03000SQL 語句尚未結束(SQL STATEMENT NOT YET COMPLETE)
08 類連接例外
08000連接例外(CONNECTION EXCEPTION)
08003連接不存在(CONNECTION DOES NOT EXIST)
08006連接失敗(CONNECTION FAILURE)
08001SQL 客戶端不能建立 SQL 連接(SQLCLIENT UNABLE TO ESTABLISH SQLCONNECTION)
08004SQL 伺服器拒絕建立 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)
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)
22002NULL 值不能做指示器參數(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 過程例外
2F000SQL 過程例外(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 自己內部的錯誤)
58030IO 錯誤(IO ERROR)
58P01未定義的文件(UNDEFINED FILE)
58P02重複的文件(DUPLICATE FILE)
F0 類配置文件錯誤
F0000配置文件錯誤(CONFIG FILE ERROR)
F0001鎖文件存在(LOCK FILE EXISTS)
P0 類PL/pgSQL 錯誤
P0000PLPGSQL 錯誤(PLPGSQL ERROR)
P0001拋出例外(RAISE EXCEPTION)
XX 類內部錯誤
XX000內部錯誤(INTERNAL ERROR)
XX001資料損壞(DATA CORRUPTED)
XX002索引損壞(INDEX CORRUPTED)