Appendix A. PostgreSQL 錯誤碼

PostgreSQL 服務器發出的所有消息都賦予了五個字符 的錯誤代碼,這些代碼遵循 SQL 的 "SQLSTATE" 代碼的習慣。需要知道發生 了什麼錯誤條件的應用通常應該測試錯誤代碼,而不是查看文本錯誤信息。這些錯誤 代碼輕易不會隨著 PostgreSQL 的版本更新而修改, 並且一般也不會隨著錯誤信息的本地化而發生修改。

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

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

Table A-1. PostgreSQL 錯誤代碼

錯誤代碼含義
00 類成功完成
00000成功完成
01 類警告
01000警告
0100C警告,返回了動態結果
01008警告,隱含補齊了零比特位
01003警告,在集合函數裡消除了空值
01004警告,字串數據在右端截斷
02 類沒有數據 --- 按照 SQL99 的要求,這也是警告類
02000沒有數據
02001返回了沒有附加動態結果集
03 類SQL 語句尚未結束
03000SQL 語句尚未結束
08 類連接例外
08000連接例外
08003連接不存在
08006連接失敗
08001SQL 客戶端不能建立 SQL 連接
08004SQL 服務器拒絕建立 SQL 連接
08007未知的事務分辨率
08P01違反協議
09 類觸發器動作列外
09000觸發的動作例外
0A 類不支持特性
0A000不支持此特性
0B 類非法事務初始化
0B000非法事務初始化
0F 類指示器例外
0F000指示器例外
0F001非法的聲明
0L 類非法賦權人
0L000非法賦權人
0LP01非法賦權操作
0P 類非法角色聲明
0P000非法角色聲明
21 類勢違反
21000勢違反
22 類數據例外
22000數據例外
2202E數組元素錯誤
22021字符不在準備好的範圍內
22008日期時間字段溢出
22012被零除
22005賦值中出錯
2200B逃逸字符衝突
22022指示器溢出
22015內部字段溢出
22018類型轉換時非法的字符值
22007非法日期時間格式
22019非法的逃逸字符
2200D非法的逃逸字節
22025非法逃逸序列
22010非法指示器參數值
22020非法限制值
22023非法參數值
2201B非法正則表達式
22009非法時區顯示值
2200C非法使用逃逸字符
2200G最相關類型不匹配
22004不允許 NULL 值
22002NULL 只不能做指示器參數
22003數字值超出範圍
22026字串數據長度不匹配
22001字串數據右邊被截斷
22011抽取子字串錯誤
22027截斷錯誤
22024未結束的 C 字串
2200F零長度的字符串
22P01浮點例外
22P02非法文本表現形式
22P03非法二進制表現形式
22P04錯誤的 COPY 格式
22P05不可翻譯字符
23 類違反完整性約束
23000違反完整性約束
23001違反限制
23502違反非空
23503違反外鍵約束
23505違反唯一約束
23514違反檢查
24 類非法遊標狀態
24000非法遊標狀態
25 類非法事務狀態
25000非法事務狀態
25001活躍的 SQL 狀態
25002分支事務已經激活
25008持有的遊標要求同樣的隔離級別
25003對分支事務的不恰當的訪問方式
25004對分支事務的不恰當的隔離級別
25005分支事務沒有活躍的 SQL 事務
25006只讀的 SQL 事務
25007不支持混和的模式和數據語句
25P01沒有活躍的 SQL 事務
25P02在失敗的 SQL 事務中
26 類非法 SQL 語句名
26000非法 SQL 語句名
27 類違反觸發的數據改變
27000違反觸發的數據改變
28 類非法授權聲明
28000非法授權聲明
2B 類依然存在依賴的優先級描述符
2B000依然存在依賴的優先級描述符
2BP01依賴性對象仍然存在
2D 類非法的事務終止
2D000非法的事務終止
2F 類SQL 過程例外
2F000SQL 過程例外
2F005執行的函數沒有返回語句
2F002不允許修改 SQL 數據
2F003企圖使用禁止的 SQL 語句
2F004不允許讀取 SQL 數據
34 類非法遊標名
34000非法遊標名
38 類外部過程例外
38000外部過程例外
38001不允許包含的 SQL
38002不允許修改 SQL 數據
38003企圖使用禁止的 SQL 語句
38004不允許讀取 SQL 數據
39 類外部過程調用例外
39000外部過程調用例外
39001返回了非法的 SQLSTATE
39004不允許空值
39P01違反觸發器協議
39P02違反SRF協議
3D 類非法數據庫名
3D000非法數據庫名
3F 類非法模式名
3F000非法模式名
40 類事務回滾
40000事務回滾
40002違反完整性約束
40001串行化失敗
40003不知道語句是否結束
40P01偵測到死鎖
42 類語法錯誤或者違反訪問規則
42000語法錯誤或者違反訪問規則
42601語法錯誤
42501權限不夠
42846無法進行類型轉換
42803分組錯誤
42830非法的外鍵
42602非法名字
42622名字太長
42939保留名字
42804數據類型不匹配
42P18未決的數據類型
42809錯誤的對象類型
42703未定義的字段
42883未定義的函數
42P01未定義的表
42P02未定義的參數
42704未定義對象
42701重復的字段
42P03重復的遊標
42P04重復的數據庫
42723重復的函數
42P05重復的語句
42P06重復的模式
42P07重復的表
42712重復的別名
42710重復的對象
42702模糊的字段
42725模糊的函數
42P08模糊的參數
42P09模糊的別名
42P10非法字段引用
42611非法字段定義
42P11非法遊標定義
42P12非法的數據庫定義
42P13非法函數定義
42P14非法語句定義
42P15非法模式定義
42P16非法表定義
42P17非法對象定義
44 類違反 WITH CHECK 選項
44000違反 WITH CHECK 選項
53 類資源不夠
53000資源不夠
53100磁盤滿
53200內存耗盡
53300太多連接
54 類超過程序限制
54000超過程序限制
54001語句太復雜
54011太多字段
54023參數太多
55 類對象不在預先要求的狀態
55000對象不在預先要求的狀態
55006對象在使用中
55P02無法修改運行時參數
57 類操作者幹涉
57000操作者幹涉
57014查詢被取消
57P01管理員關機
57P02崩潰關機
57P03現在無法連接
58 類系統錯誤( PostgreSQL 自己內部的錯誤)
58030IO 錯誤
58P01未定義的文件
58P02重復的文件
F0 類配置文件錯誤
F0000配置文件錯誤
F0001鎖文件存在
XX 類內部錯誤
XX000內部錯誤
XX001數據崩潰
XX002索引崩潰