DBAtlas · データベース運用アトラス

2F003: prohibited_sql_statement_attempted

PostgreSQL

意味

SQL 関数/ルーチン内で、そのコンテキストでは禁止されている文が試行された。Class 2F (sql_routine_exception) に属する。例: 読み取り専用であるべき関数がデータを変更しようとした。

原因

PostgreSQL 本体がこのコードを発生させることはまれで、通常は拡張機能や手続き言語のコードから発生する。注: IMMUTABLE/STABLE 指定の関数で INSERT/UPDATE/DELETE を実行しても 2F003 にはならず、コード 0A000 (feature_not_supported) で '... is not allowed in a non-volatile function' が発生する。

対処方法

エラーメッセージでどの文が禁止されたかを確認し、該当するルーチン/拡張機能のドキュメントを確認する。non-volatile function エラー (0A000) の場合は、データを変更する関数を VOLATILE (デフォルト) で定義する: CREATE FUNCTION ... LANGUAGE plpgsql VOLATILE。読み取り専用であるべき箇所 (インデックス式、制約チェック) からデータ変更呼出しを取り除く。

DBAtlas で開く →

同じデータベースの他の項目