选择 打开 改范围 完整检索页

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

百科 / 错误代码 / Class 54 程序限制超出

54011 too_many_columns

ERROR 源码确认 详解 未实测

类别
Class 54 程序限制超出
严重等级
ERROR
条件名
too_many_columns
宏名称
ERRCODE_TOO_MANY_COLUMNS
启用版本
7.4
状态
活跃

版本覆盖

速览

54011 表示物理 tuple descriptor 或相关对象定义超过固定列数上限。源码路径决定计数对象是表属性、索引键加 INCLUDE 列、分区键、统计维度还是产生行的定义。

含义

固定消息包括实际/上限列数、表最多列数、索引最多列数、分区键上限和统计专用变体。表计数使用物理属性号:已删除列仍占 tuple descriptor 槽位,所以可见列数可能低于 relnatts。索引键与 INCLUDE、分区键和统计维度各有独立上限,虽然都使用此 SQLSTATE。

锁定的 18.6 构建中,相关常量分别是用户表属性 MaxHeapAttributeNumber = 1600、tuple 属性 MaxTupleAttributeNumber = 1664INDEX_MAX_KEYS = 32PARTITION_MAX_KEYS = 32 以及 STATS_MAX_DIMENSIONS = 8。这些数值属于不同 guard;服务器诊断中的实际 count 和 limit 字段仍是判断依据。

报文模板

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

主消息 number of columns (%d) exceeds limit (%d)

来源:src/backend/access/common/heaptuple.c @ REL_18_6

主消息 number of index columns (%d) exceeds limit (%d)

来源:src/backend/access/common/indextuple.c @ REL_18_6

主消息 tables can have at most %d columns

来源:src/backend/catalog/heap.c @ REL_18_6

主消息 cannot partition using more than %d columns

来源:src/backend/commands/tablecmds.c @ REL_18_6

主消息 cannot use more than %d columns in an index

来源:src/backend/commands/indexcmds.c @ REL_18_6

主消息 cannot have more than %d columns in statistics

来源:src/backend/commands/statscmds.c @ REL_18_6

主消息 column definition lists can have at most %d entries

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

诊断

从消息和上下文读取对象类型、实际数、上限和 DDL 操作。表或继承表要检查 pg_class.relnatts 与包含 attisdroppedpg_attribute,不能只数可见列名。索引 DDL 要把 INCLUDE 列算入,分区和 extended statistics 则检查各自的键/维度数;FROM 中函数的 column definition list 也有 54011 的行形状上限。

处理

减少或拆分对象定义,改用其他索引/分区设计,或把派生数据移到关联表。若原因是 dropped 的物理槽位,再删除可见列并不会回收它们;普通物理重写(如 VACUUM FULLCLUSTER)也会在 tuple descriptor 中保留这些 dropped attribute。应新建具有目标逻辑列布局的表,在保留依赖的前提下迁移数据,再有选择地减少索引键/INCLUDE 列或统计维度并验证 DDL。显式事务中若发生 ERROR,重试前执行 ROLLBACKROLLBACK TO SAVEPOINT;自动提交只有在 schema 变更真正消除上限后才能重试。

版本

锁定目录从 7.4 记录;引用 heap、index、table、partition、statistics 和 row-shape 路径来自 PostgreSQL 18.6,未创建超大 schema。

来源

证据

断言

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

同类错误代码

Class 54 程序限制超出 下的其他成员。