↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

百科 / SQL 状态码 / 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.0
状态
有效

版本覆盖

  1. 18
  2. 17
  3. 16
  4. 15
  5. 14
  1. 13
  2. 12
  3. 11
  4. 10
  5. 9.6
  6. 9.5
  7. 9.4
  8. 9.3
  9. 9.2
  10. 9.1
  11. 9.0
  1. 19 beta
  2. 20 dev

版本条依据已采样构建显示;灰色版本可能尚未采样,悬停可查看。手册链接随版本选择,源码和运行证据保持原核验构建。

速览

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_drop、table_rewrite 和一般 event-trigger 上下文是不同边界;不要把这类错误解释成对象不存在或普通函数返回错误。

处置

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

版本

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

来源

证据

断言

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

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 39 外部例程调用异常 External Routine Invocation Exception 6 个 ↗
39000 external_routine_invocation_exception ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION ERROR 7.4 起已知
外部例程调用异常,如 pgcrypto 的库失败。 有效
39001 invalid_sqlstate_returned ERRCODE_E_R_I_E_INVALID_SQLSTATE_RETURNED ERROR 7.4 起已知
外部例程返回了无效的 SQLSTATE。 有效
39004 null_value_not_allowed ERRCODE_E_R_I_E_NULL_VALUE_NOT_ALLOWED ERROR 7.4 起已知
外部例程调用中不允许出现 NULL 值。 有效
39P01 trigger_protocol_violated ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED ERROR 7.4 起已知
触发器违反了返回值或调用协议。 有效
39P02 srf_protocol_violated ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED ERROR 7.4 起已知
集合返回函数违反了 SRF 调用协议。 有效
39P03 event_trigger_protocol_violated ERRCODE_E_R_I_E_EVENT_TRIGGER_PROTOCOL_VIOLATED ERROR 9.5.0 起已知
事件触发器辅助函数在错误的事件上下文调用。 有效