付録 A. PostgreSQL エラーコード

PostgreSQLサーバによって発行されるメッセージはすべて、標準SQLにおける"SQLSTATE"コードの記述方法に従った、5文字のエラーコードが割り当てられています。 どのようなエラー条件が発生したかを把握しなければならないアプリケーションは、通常テキスト形式のエラーメッセージを確認するのではなく、このエラーコードを検査すべきです。 このエラーコードは、PostgreSQL リリースの違いによって変更することはあまりありません。また、エラーメッセージの各国言語化による変更にも影響されません。 PostgreSQLで発行されるエラーコードの幾つか(全部ではありません)は、標準SQLで定義されていることに注意して下さい。 標準SQLで定義されていない追加のエラーコードは、独自のものであったり他のデータベースから取り入れたものです。

標準に従い、エラーコードの最初の2文字はエラーのクラスを表し、残り3文字がそのクラス内の特定条件を表します。 従って、特定のエラーコードを検知するアプリケーションは、エラークラスから何をすべきかを推定することさえもできます。

表A-1は、PostgreSQL 8.0.3で定義されたエラーコードをすべて一覧で示しています。 (標準SQLでは定義されているが、現在実際に使用されていないものもあります。) このエラークラスはまた、 各エラークラスに対し、残りの3文字が000となる"標準"エラーコードが存在することを示しています。 あるクラスの範囲内で発生したが、より特定のコードが割り当てられていないエラー条件のためだけに、このコードが使用されます。

それぞれのエラーに対するPL/pgSQLの状態は、空白の代わりにアンダースコアとなっていますが、 表に示してある表現と同一のものです。例えば、コード22012はDIVISION BY ZEROですが状態名はDIVISION_BY_ZEROです。状態名は大文字でも小文字でも記述可能です。(PL/pgSQLは、エラーの場合と異なり、警告の場合にはその状態名を認識しません。これらはクラス00と01と02です。)

表 A-1. PostgreSQL エラーコード

エラーコード意味
00クラス正常終了
00000正常終了
01クラス警告
01000警告
0100C動的な結果セットが返されました。
01008暗黙的な0によるビット埋めがあります。
01003集合関数内でNULL値は省略されました。
01007権限が付与されていません。
01006権限が剥奪されていません。
01004文字列データの右側が除去されました。
01P01廃止予定です。
02クラスデータがありません。— SQL:1999ではこれは警告クラスです。
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内部フィールドのオーバーフロー
2201E無効な対数の変数
2201F無効な階乗関数の変数
2201GINVALID ARGUMENT FOR WIDTH BUCKET FUNCTION無効な幅バケット関数の変数
22007無効な日付時刻の書式
22019無効なエスケープ文字
2200D無効なエスケープバイト(8bit)
22025無効なエスケープシーケンス
22010無効な指示子パラメータの値
22020無効な制限値
22023無効なパラメータ値
2201B無効な正規表現
22009無効なタイムゾーン置換値
2200Cエスケープ文字の無効な使用
2200G最も明確な型の不一致
22004NULL 値の不許可
22002NULL値、もしくは、指示子パラメータがない
22003範囲外の数値
22026文字列長の不一致
22001文字列データの右側の切り詰め
22011部分文字列エラー
22027切り詰めエラー
22024終端の無いC 文字列
2200F空の文字列
22P01浮動小数点例外
22P02無効なテキスト表現
22P03無効なバイナリ表現
22P04コピーファイルの書式不良
22P05翻訳できない文字
23クラス整合性制約違反
23000整合性制約違反
23001制限違反
23502非NULL違反
23503外部キー違反
23505一意性違反
23514検査違反
24クラス無効なカーソル状態
24000無効なカーソル状態
25クラス無効なトランザクション状態
25000無効なトランザクション状態
25001SQLトランザクションが実行中
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実行した関数にRETURN文が存在しない
2F002SQLデータの変更は許可されていない
2F003禁止されたSQL文の試行
2F004SQLデータの読み取りは許可されていない
34クラス無効なカーソル名称
34000無効なカーソル名称
38クラス外部関数例外
38000外部関数例外
38001含まれるSQLは許可されていない。
38002SQLデータの変更は許可されていない。
38003禁止されたSQL文の試行
38004SQLデータの読み取りは許可されていない
39クラス外部関数呼び出し例外
39000外部関数呼び出し例外
39001無効なSQLSTATEが返された。
39004NULL 値は許されません。
39P01トリガプロトコル違反
39P02SRFプロトコル違反
3Bクラスセーブポイント例外
3B000セーブポイント例外
3B001無効なセーブポイント指定
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クラス検査オプションに伴う違反
44000検査オプションに伴う違反
53クラスリソース不足
53000リソース不足
53100ディスク空き容量不足
53200メモリ不足
53300接続過多
54クラスプログラム制限の超過
54000プログラム制限の超過
54001文が複雑過ぎる
54011列数の過多
54023引数の過多
55クラス必要条件を満たさないオブジェクト
55000必要条件を満たさないオブジェクト
55006使用中のオブジェクト
55P02関数パラメータは変更できません
55P03ロックは使用できません
57クラス操作の介入
57000操作の介入
57014問い合わせのキャンセル
57P01管理者による停止
57P02クラッシュによる停止
57P03現在接続できません
58クラスシステムエラー(外部原因によるPostgreSQL自体のエラー)
58030入出力エラー
58P01未定義のファイル
58P02重複するファイル
F0クラス設定ファイルエラー
F0000設定ファイルエラー
F0001ロックファイルの存在
P0クラスPL/pgSQLエラー
P0000PLPGSQLエラー
P0001例外の発生
Class XX内部エラー
XX000内部エラー
XX001データの破損
XX002インデックスの破損