# 54000 — program_limit_exceeded

> PostgreSQL SQLSTATE 54000 的来源与诊断参考。
---

# 54000

## 速览 {#at-a-glance}
`54000` 用于超过具体程序、表示或扩展上限。固定例子包括安全分配大小算术、关系 block 编号、数组维度/大小、cube 维度和 hstore pair 数，具体限制由源码路径决定。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `54000` |
| 条件名 | `program_limit_exceeded` |
| 状态 | `有效` |
| 已知存在于 | `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_PROGRAM_LIMIT_EXCEEDED` |
| 别名 | `—` |

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

## 含义 {#meaning}
它不是泛化的“大值”警告：核心 `mcxt.c` 检查分配大小的加法和乘法，溢出时报 `invalid memory allocation request size ...`；关系存储拒绝 `InvalidBlockNumber` 对应的 block；数组构造/下标路径分别检查维度和总大小。扩展还定义自己的上限：cube 报维度不能超过 `%d`，hstore 报实际与最大 pair 数。限制取决于操作和源码路径。

## 诊断 {#diagnosis}
确认源码组件以及实际值/上限，判断是分配大小溢出、关系增长、数组维度/大小、cube 维度、hstore pair 还是其他组件。检查会扩张请求的表达式或生成值；分配大小溢出是请求算术问题，不能据此断言主机 RAM 已耗尽。

## 处理 {#response}
降低请求大小、维度、block 增长或 pair 数，拆分值，或选择符合文档上限的表示；关系达到限制时先重设计或分区存储。显式事务中若发生 `ERROR`，重试前执行 `ROLLBACK` 或 `ROLLBACK TO SAVEPOINT`；自动提交只有在请求符合指定程序上限后才能重试。不要静默丢弃元素，也不要盲目提高无关内存参数来掩盖算术溢出。

## 版本 {#versions}
锁定目录从 7.4 记录；引用核心和扩展路径来自 PostgreSQL 18.6，未强制触发限制，也未创建超大扩展值。

## 相关 {#related}
[`54011`](../54011/)、[`54023`](../54023/)、[`22000`](../22000/)

## 来源 {#sources}
[`contrib/cube/cube.c#L162-L166`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/cube/cube.c#L162)

[`contrib/hstore/hstore_io.c#L522-L525`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/hstore/hstore_io.c#L522)

[`src/backend/utils/mmgr/mcxt.c#L1683-L1718`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/mmgr/mcxt.c#L1683)

[`src/backend/storage/smgr/md.c#L493-L504`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/storage/smgr/md.c#L493)

[`src/backend/utils/adt/arraysubs.c#L147-L152`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/arraysubs.c#L147)

结构化[证据记录](../../data/evidence/54000.json)保存固定消息以及源码/运行边界。
