选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 错误代码 / Class 39 外部例程调用异常

39P03 event_trigger_protocol_violated

ERROR 源码确认 参考 未实测

类别
Class 39 外部例程调用异常
严重等级
ERROR
条件名
event_trigger_protocol_violated
宏名称
ERRCODE_E_R_I_E_EVENT_TRIGGER_PROTOCOL_VIOLATED
启用版本
9.5
状态
活跃

版本覆盖

速览

39P03 是 event_trigger_protocol_violated。固定核心源码确认多个 event-trigger helper 会检查当前事件上下文。

含义

调用 pg_event_trigger_dropped_objects()、table-rewrite helper 或 DDL helper 时,如果当前函数不是源码要求的 sql_drop、table_rewrite 或 event trigger function,就会报告该条件。固定报文中的 %s 会带出具体函数名;这属于调用上下文错误,不是对象不存在。

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 %s can only be called in a sql_drop event trigger function

来源:src/backend/commands/event_trigger.c @ REL_18_6

主消息 %s can only be called in a table_rewrite event trigger function

来源:src/backend/commands/event_trigger.c @ REL_18_6

主消息 %s can only be called in an event trigger function

来源:src/backend/commands/event_trigger.c @ REL_18_6

诊断

先保留完整 message,确认被调用的 helper 以及实际 event trigger 类型。sql_droptable_rewrite 和一般 event-trigger 上下文是不同边界;不要把这类错误解释成对象不存在或普通函数返回错误。

处置

把 helper 调用放到匹配的 event trigger function 和事件中,或移除不适用的调用。核对部署版本的 event-trigger 定义与调用顺序后再重新执行 DDL;单纯重试原 DDL 不会改变当前上下文。

版本

锁定目录从 9.5.0 记录该条件,并在 9.5 之后的正式快照及 19beta3 中出现;固定报告该码的路径 为 PostgreSQL 18.6。

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

  • 39P03 is event_trigger_protocol_violated in Class 39.

    核实方式Read the fixed definition row.

    来源src/backend/utils/errcodes.txt

  • The core event-trigger functions reject calls outside their required sql_drop, table_rewrite, or event-trigger context with this code.

    核实方式Read each currentEventTriggerState guard and its message.

    来源src/backend/commands/event_trigger.c

  • The message names the required event-trigger function context, so the failing boundary is call context rather than object existence alone.

    核实方式Compare the guard with the function named in the message.

    来源src/backend/commands/event_trigger.c

同类错误代码

Class 39 外部例程调用异常 下的其他成员。