PostgreSQL エラーコード

PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# 付録 A. PostgreSQL エラーコード

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

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

表A-1は、PostgreSQL 8.0.0で定義されたエラーコードをすべて一覧で示しています。 (標準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 文の未完了
`03000` | SQL 文は未完了です。
08クラス | 接続の例外
`08000` | 接続の例外が発生しました。
`08003` | 接続が存在しません。
`08006` | 接続に失敗しました。
`08001` | SQLクライアントはSQL接続を確立できませんでした。
`08004` | SQLサーバは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` | 無効な階乗関数の変数
`2201G` | INVALID ARGUMENT FOR WIDTH BUCKET FUNCTION | 無効な幅バケット関数の変数
`22007` | 無効な日付時刻の書式
`22019` | 無効なエスケープ文字
`2200D` | 無効なエスケープバイト(8bit)
`22025` | 無効なエスケープシーケンス
`22010` | 無効な指示子パラメータの値
`22020` | 無効な制限値
`22023` | 無効なパラメータ値
`2201B` | 無効な正規表現
`22009` | 無効なタイムゾーン置換値
`2200C` | エスケープ文字の無効な使用
`2200G` | 最も明確な型の不一致
`22004` | NULL 値の不許可
`22002` | NULL値、もしくは、指示子パラメータがない
`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` | 無効なトランザクション状態
`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 関数例外
`2F000` | SQL 関数例外
`2F005` | 実行した関数にRETURN文が存在しない
`2F002` | SQLデータの変更は許可されていない
`2F003` | 禁止されたSQL文の試行
`2F004` | SQLデータの読み取りは許可されていない
34クラス | 無効なカーソル名称
`34000` | 無効なカーソル名称
38クラス | 外部関数例外
`38000` | 外部関数例外
`38001` | 含まれるSQLは許可されていない。
`38002` | SQLデータの変更は許可されていない。
`38003` | 禁止されたSQL文の試行
`38004` | SQLデータの読み取りは許可されていない
39クラス | 外部関数呼び出し例外
`39000` | 外部関数呼び出し例外
`39001` | 無効なSQLSTATEが返された。
`39004` | NULL 値は許されません。
`39P01` | トリガプロトコル違反
`39P02` | SRFプロトコル違反
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エラー
`P0000` | PLPGSQLエラー
`P0001` | 例外の発生
Class XX | 内部エラー
`XX000` | 内部エラー
`XX001` | データの破損
`XX002` | インデックスの破損

前のページ | ホーム | 次のページ
付録 | 上に戻る | 日付/時刻のサポート