# 42P13 — 无效函数定义

> PostgreSQL SQLSTATE 42P13：来源与诊断参考。
---

# 42P13 — 无效函数定义

## 速览 {#at-a-glance}

`42P13`（**invalid_function_definition**）函数、聚合和触发器声明可能在执行前校验失败。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| 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` |
| 别名 | `—` |

<!-- source facts: data/errcodes/42P13.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}

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

## 诊断 {#diagnosis}

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

## 处理 {#response}

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

## 消息 {#messages}

固定源码中的代表性消息包括：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.`。占位符由实际对象、列或参数填充。

## 版本 {#versions}

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

## 相关 {#related}

- [`42P18`](../42p18/)
- [`42804`](../42804/)

## 来源 {#sources}

源码消息、行号和证据边界见 [作者证据](../../data/evidence/42p13.json)。

- `src/backend/catalog/pg_aggregate.c:142-145` ([fixed source](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/catalog/pg_aggregate.c#L142-L145))
- `src/backend/executor/functions.c:2222-2226` ([fixed source](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/executor/functions.c#L2222-L2226))
- `src/pl/plpgsql/src/pl_comp.c:493-496` ([fixed source](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/pl/plpgsql/src/pl_comp.c#L493-L496))
