2F003: prohibited_sql_statement_attempted
PostgreSQLO que significa?
Houve a tentativa de executar, dentro de uma função/rotina SQL, um comando proibido naquele contexto. Pertence à Class 2F (sql_routine_exception). Por exemplo, uma função que deveria ser somente leitura tentando modificar dados.
Por que acontece?
O PostgreSQL em si raramente gera este código; geralmente ele vem de código de extensões ou de linguagens procedurais. Observação: uma função marcada como IMMUTABLE/STABLE que executa INSERT/UPDATE/DELETE não gera 2F003; ela gera '... is not allowed in a non-volatile function' com o código 0A000 (feature_not_supported).
Como resolver
Leia na mensagem de erro qual comando foi proibido e consulte a documentação da rotina/extensão envolvida. Se receber o erro de função não volátil (0A000), defina a função que modifica dados como VOLATILE (é o padrão): CREATE FUNCTION ... LANGUAGE plpgsql VOLATILE. Remova chamadas que modificam dados de locais que precisam ser somente leitura (expressões de índice, verificações de constraint).