DBAtlas · Атлас эксплуатации баз данных

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. Уберите изменяющие данные вызовы из мест, которые должны быть только для чтения (индексные выражения, проверки ограничений).

Открыть в DBAtlas →

Ещё по этой СУБД