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 中打开 →

同一数据库的其他条目