跳转到主要内容

2201W — invalid_row_count_in_limit_clause

PostgreSQL SQLSTATE 2201W 的来源与诊断参考。

2201W

速览

LIMIT 或 FETCH 行数触发了特定形式的守卫。固定路径报告 LIMIT must not be negative;解析器另行拒绝 FETCH FIRST ... WITH TIES 中字面 NULL 行数。

字段
SQLSTATE 2201W
条件名 invalid_row_count_in_limit_clause
状态 有效
已知存在于 8.4.0
锁定快照 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_ROW_COUNT_IN_LIMIT_CLAUSE
别名

代表性报文

代表性守卫使用以下首要文本:

路径 首要文本
普通 LIMIT 的负 count LIMIT must not be negative
FETCH FIRST ... WITH TIES 中的字面 NULL row count cannot be null in FETCH FIRST ... WITH TIES clause

含义

执行器计算普通 LIMIT count 时,NULL 被解释为没有 count(LIMIT ALL),零值合法并返回零行,负值才报告 2201W。解析器另有 FETCH FIRST ... WITH TIES 裸 NULL 常量守卫;这不是所有可为空 LIMIT 表达式都采用的统一规则。OFFSET 由 2201X 处理。

诊断

先确认报文来自普通 LIMIT 求值还是 WITH TIES 解析规则,再检查表达式实际值和类型。区分无 ties 时的 NULL、with ties 的字面 NULL、零值和负值。源码的 A_Const 检查范围很窄,隐藏在表达式中的 NULL 可能通过解析器,因此应依据实际语句和报文分类。

处理

普通 LIMIT 若要不限行可使用 NULL,否则提供非负 count;WITH TIES 应提供该语法接受的非 NULL 行数。如果负 count 或解析器 ERROR 发生在显式事务中,应先 ROLLBACK 或回滚到既有保存点再重试;自动提交可重试修正后的语句。

版本

锁定目录从 8.4.0 起记录该条件;本页固定源码路径为 PostgreSQL 18.6。未声称本页有自然运行观察。

2201X22012

来源

执行器对 NULL/零值/负值的处理在 src/backend/executor/nodeLimit.c#L347-405;字面 WITH TIES NULL 守卫在 src/backend/parser/parse_clause.c#L1890-1907。结构化证据记录保留两种首要角色;本页未运行自然案例。