付録 A. PostgreSQLエラーコード

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

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

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

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

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

エラーコード意味条件名
00クラス— 正常終了
00000正常終了successful_completion
01 クラス — 警告
01000警告warning
0100C動的な結果セットが返されたdynamic_result_sets_returned
01008暗黙的な0によるビット埋めがあるimplicit_zero_bit_padding
01003集合関数内でNULL値は省略された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文の未完了
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
20クラス — Caseが存在しない
20000CASEが存在しないcase_not_found
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
22014NTILE関数に対する無効な引数invalid_argument_for_ntile_function
22016無効なNTH_VALUE関数の引数invalid_argument_for_nth_value_function
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無効なエスケープバイト(8ビット)invalid_escape_octet
22025無効なエスケープシーケンスinvalid_escape_sequence
22P06エスケープ文字の非標準な使用nonstandard_use_of_escape_character
22010無効な指示子パラメータの値invalid_indicator_parameter_value
22023無効なパラメータ値invalid_parameter_value
2201B無効な正規表現invalid_regular_expression
2201WLIMIT句における無効な行番号invalid_row_count_in_limit_clause
2201Xオフセット句結果における無効な行数invalid_row_count_in_result_offset_clause
22009無効なタイムゾーン置換値invalid_time_zone_displacement_value
2200Cエスケープ文字の無効な使用invalid_use_of_escape_character
2200G最も明確な型の不一致most_specific_type_mismatch
22004NULL値の不許可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コピーファイルの書式不良bad_copy_file_format
22P05翻訳できない文字untranslatable_character
2200LXML文書ではないnot_an_xml_document
2200M不正なXMLドキュメントinvalid_xml_document
2200N不正なXMLコンテントinvalid_xml_content
2200S不正なXMLコメントinvalid_xml_comment
2200T不正なXML処理指示invalid_xml_processing_instruction
23 クラス — 整合性制約違反
23000整合性制約違反integrity_constraint_violation
23001制限違反restrict_violation
23502非NULL違反not_null_violation
23503外部キー違反foreign_key_violation
23505一意性違反unique_violation
23514検査違反check_violation
24 クラス — 無効なカーソル状態
24000無効なカーソル状態invalid_cursor_state
25 クラス — 無効なトランザクション状態
25000無効なトランザクション状態invalid_transaction_state
25001SQLトランザクションが実行中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実行した関数にRETURN文が存在しないfunction_executed_no_return_statement
2F002SQLデータの変更は許可されていないmodifying_sql_data_not_permitted
2F003禁止されたSQL文の試行prohibited_sql_statement_attempted
2F004SQLデータの読み取りは許可されていないreading_sql_data_not_permitted
34 クラス — 無効なカーソル名称
34000無効なカーソル名称invalid_cursor_name
38 クラス — 外部関数例外
38000外部関数例外external_routine_exception
38001含まれるSQLは許可されていないcontaining_sql_not_permitted
38002SQLデータの変更は許可されていないmodifying_sql_data_not_permitted
38003禁止されたSQL文の試行prohibited_sql_statement_attempted
38004SQLデータの読み取りは許可されていないreading_sql_data_not_permitted
39 クラス — 外部関数呼び出し例外
39000外部関数呼び出し例外external_routine_invocation_exception
39001無効なSQLSTATEが返されたinvalid_sqlstate_returned
39004NULL 値は許されていないnull_value_not_allowed
39P01トリガプロトコル違反trigger_protocol_violated
39P02SRFプロトコル違反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
42P20ウィンドウエラーwindowing_error
42P19無効な再帰invalid_recursion
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 クラス — 検査オプションに伴う違反
44000検査オプションに伴う違反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_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
P0002データがありませんno_data_found
P0003行が多すぎますtoo_many_rows
XX クラス — 内部エラー
XX000内部エラーinternal_error
XX001データの破損data_corrupted
XX002インデックスの破損index_corrupted