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

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

百科 / SQL 状态码 / Class 54 超出程序限制

54001 statement_too_complex

54001 \u2014 statement_too_complex

ERROR 源码确认 详解 未实测

类别
Class 54 超出程序限制
严重等级
ERROR
条件名
statement_too_complex
宏名称
ERRCODE_STATEMENT_TOO_COMPLEX
最早已知存在
7.4
状态
有效

手册收录:8.1、8.2、8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、11、12、13、14、15、16、17、18、19、20。此处仅表示同版本手册收录,运行证据仍以原核验构建为准。

版本覆盖

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

54001

速览 {#at-a-glance}

54001 覆盖超过规划器、解析器或执行栈限制的语句。固定路径包括 4096 个 grouping set 上限和 max_stack_depth 检查。

含义 {#meaning}

源码区分结构性查询上限 too many grouping sets present (maximum 4096) 与递归执行深度 stack depth limit exceeded,后者 hint 指向 max_stack_depth。两者修复不同。

诊断 {#diagnosis}

保留消息和阶段:grouping sets 应统计生成数量并简化查询;stack depth 应检查递归 SQL/函数展开,并在改设置前比较平台栈限制。

处理 {#response}

重写或拆分结构过大的语句;stack depth 应先消除意外递归或减少嵌套,仅在确认操作系统栈允许时调整 max_stack_depth,再验证重写后的语句。显式事务中若发生此 ERROR,重试前执行 ROLLBACK 或 ROLLBACK TO SAVEPOINT;自动提交只有在语句或 stack setting 修正后才能重试。GUC 的 rlimit 检查会在 SET 或配置值校验时比较平台栈上限;若 SET 失败,仍按发起它的事务上下文恢复。

版本 {#versions}

锁定目录从 7.4 记录;引用解析器和栈深度路径来自 PostgreSQL 18.6,未强制触发限制。

相关 {#related}

54000、54011、42601

来源 {#sources}

src/backend/parser/parse_agg.c#L1166-L1172

src/backend/utils/misc/stack_depth.c#L100-L105

src/backend/utils/misc/stack_depth.c#L156-L168

结构化证据记录保存固定消息以及源码/运行边界。

来源

证据

断言

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

报文模板

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

主消息 too many grouping sets present (maximum 4096)

来源: 来源:src/backend/parser/parse_agg.c @ REL_18_6

主消息 stack depth limit exceeded
HINT Increase the configuration parameter "max_stack_depth" (currently %dkB), after ensuring the platform stack depth limit is adequate.

来源: 来源:src/backend/utils/misc/stack_depth.c @ REL_18_6

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 54 超出程序限制 Program Limit Exceeded 4 个 ↗
54000 program_limit_exceeded ERRCODE_PROGRAM_LIMIT_EXCEEDED ERROR 7.4 起已知
超出程序固定上限,如数组维度或分配大小。 有效
54001 statement_too_complex ERRCODE_STATEMENT_TOO_COMPLEX ERROR 7.4 起已知
语句过于复杂,超出 grouping set 或栈深度上限。 有效
54011 too_many_columns ERRCODE_TOO_MANY_COLUMNS ERROR 7.4 起已知
对象定义的列数超过上限,如表属性或索引键。 有效
54023 too_many_arguments ERRCODE_TOO_MANY_ARGUMENTS ERROR 7.4 起已知
函数或过程的参数个数超过编译时上限。 有效