2F003: prohibited_sql_statement_attempted
PostgreSQL¿Qué significa?
Se intentó, dentro de una función/rutina SQL, una sentencia prohibida en ese contexto. Pertenece a la Class 2F (sql_routine_exception). Por ejemplo, una función que se espera de solo lectura intenta modificar datos.
¿Por qué ocurre?
El núcleo de PostgreSQL rara vez genera este código; suele provenir de código de extensiones o de lenguajes procedurales. Nota: una función marcada IMMUTABLE/STABLE que ejecuta INSERT/UPDATE/DELETE no genera 2F003; genera '... is not allowed in a non-volatile function' con el código 0A000 (feature_not_supported).
Cómo solucionarlo
Lea en el mensaje de error qué sentencia se prohibió y consulte la documentación de la rutina/extensión implicada. Si obtiene el error de función no volátil (0A000), defina la función que modifica datos como VOLATILE (es el valor predeterminado): CREATE FUNCTION ... LANGUAGE plpgsql VOLATILE. Elimine las llamadas que modifican datos de los lugares que deben ser de solo lectura (expresiones de índice, comprobaciones de restricciones).