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

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

百科 / 错误代码 / Class 22 数据异常

2202H invalid_tablesample_argument

ERROR 源码确认 参考 未实测

类别
Class 22 数据异常
严重等级
ERROR
条件名
invalid_tablesample_argument
宏名称
ERRCODE_INVALID_TABLESAMPLE_ARGUMENT
启用版本
9.5
状态
活跃

版本覆盖

速览

TABLESAMPLE 方法收到无效参数。固定核心和 contrib 方法会以方法专属报文拒绝越界百分比或负样本数量。

报文

固定执行器和采样方法使用以下首要文本:

归属/守卫 首要文本
方法参数为 NULL TABLESAMPLE parameter cannot be null
Bernoulli/system 百分比(包括 NaN) sample percentage must be between 0 and 100
system_rows 数量为负 sample size must not be negative
system_time 时间为负或 NaN sample collection time must not be negative

报文模板

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

主消息 sample percentage must be between 0 and 100

来源:src/backend/access/tablesample/bernoulli.c @ REL_18_6

主消息 TABLESAMPLE parameter cannot be null

来源:src/backend/executor/nodeSamplescan.c @ REL_18_6

主消息 sample percentage must be between 0 and 100

来源:src/backend/access/tablesample/bernoulli.c @ REL_18_6

主消息 sample size must not be negative

来源:contrib/tsm_system_rows/tsm_system_rows.c @ REL_18_6

主消息 sample collection time must not be negative

来源:contrib/tsm_system_time/tsm_system_time.c @ REL_18_6

含义

2202H 是方法参数代码,不是一个适用于所有 TABLESAMPLE 的统一范围。执行器在调用方法前拒绝 NULL 方法参数。核心 Bernoulli 和 system 方法接受包含端点的 0 到 100 百分比,并拒绝 NaN。system_rows contrib 方法只拒绝负的请求行数,因此零是允许的;system_time 拒绝负值或 NaN 的采样时间,因此零是允许的;该 guard 没有设置有限的上界,正 Infinity 不会被这个比较本身拒绝。REPEATABLE NULL 属于独立的 2202G 分支,其他采样扩展也可能有自己的参数守卫。

诊断

先定位采样方法和参数位置,再修改值。方法参数为 NULL 指向执行器守卫;0 到 100 之外或 NaN 的 Bernoulli/system 百分比指向核心方法;负的 system_rows 数量以及负或 NaN 的 system_time 属于 contrib 方法;该 guard 本身不会把正 Infinity 分类为错误。结合首要报文区分这些情况和 NULL REPEATABLE seed(2202G)。

处理

按所选方法使用非 NULL 参数、包含端点的有限 0 到 100 百分比、非负行数或通过其负值/NaN guard 的 system_time 值。不要通过修改方法百分比来修复 2202G 的重复 seed 错误。如果 ERROR 发生在显式事务中,应先 ROLLBACK 或回滚到既有保存点再重试;自动提交可重试修正后的语句。

版本

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

来源

证据

断言

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

同类错误代码

Class 22 数据异常 下的其他成员。