跳转到主要内容

42P13 — 无效函数定义

PostgreSQL SQLSTATE 42P13:来源与诊断参考。

42P13 — 无效函数定义

速览

42P13invalid_function_definition)函数、聚合和触发器声明可能在执行前校验失败。

字段
SQLSTATE 42P13
条件名 invalid_function_definition
状态 有效
已知存在于 7.4
锁定快照 9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3
ERRCODE_INVALID_FUNCTION_DEFINITION
别名

含义

函数定义校验在声明不兼容时使用此条件。选定的核心路径包括无法确定多态聚合转换类型(DETAIL 由调用方动态生成)、最终语句不是兼容的 SELECT 或 DML RETURNING 而导致返回类型不匹配,以及触发器函数声明参数。

诊断

修改函数前先按消息分类:聚合转换类型推断及其动态 DETAIL、最终语句/RETURNING 结果与声明返回类型不一致,或触发器函数声明参数。把已存签名、返回类型与函数体和触发器约定逐项比较;不返回行的 DML 或 utility 命令与标量强制转换失败属于不同的最终语句路径。

处理

修正消息指出的声明或函数体:为聚合提供可确定的转换类型,让函数最后语句返回声明类型;触发器参数应通过 TG_NARGS/TG_ARGV 读取,不能在声明中列出。检查依赖调用者后再重建或替换。如果 ERROR 发生在显式事务中,执行下一条 DDL 前先 ROLLBACK,或回滚到错误前的保存点。

消息

固定源码中的代表性消息包括:message: cannot determine transition data type; errdetail_internal: %s;message: return type mismatch in function declared to return %s; DETAIL: Function's final statement must be SELECT or INSERT/UPDATE/DELETE/MERGE RETURNING.;message: trigger functions cannot have declared arguments; HINT: The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead.。占位符由实际对象、列或参数填充。

版本

锁定目录显示该条件最早见于 PostgreSQL 7.4;行为说明固定在 PostgreSQL 18.6 源码,目录存在范围不等于每条消息或功能都从该版本开始。

来源

源码消息、行号和证据边界见 作者证据