2F003: prohibited_sql_statement_attempted
PostgreSQLЧто это значит?
Внутри SQL-функции/подпрограммы была предпринята попытка выполнить оператор, запрещённый в этом контексте. Относится к классу 2F (sql_routine_exception). Например, функция, которая должна только читать, пытается изменить данные.
Почему возникает?
Ядро PostgreSQL редко выдаёт этот код; обычно он исходит из кода расширения или процедурного языка. Примечание: функция с пометкой IMMUTABLE/STABLE, выполняющая INSERT/UPDATE/DELETE, выдаёт не 2F003, а '... is not allowed in a non-volatile function' с кодом 0A000 (feature_not_supported).
Как исправить
Прочитайте в сообщении об ошибке, какой оператор был запрещён, и сверьтесь с документацией соответствующей подпрограммы/расширения. Если вы получаете ошибку non-volatile function (0A000), определите изменяющую данные функцию как VOLATILE (это значение по умолчанию): CREATE FUNCTION ... LANGUAGE plpgsql VOLATILE. Уберите изменяющие данные вызовы из мест, которые должны быть только для чтения (индексные выражения, проверки ограничений).