跳转到主要内容

22023 — invalid_parameter_value

PostgreSQL SQLSTATE 22023 的来源与诊断参考。

22023

速览

当点名的参数、选项、描述符或函数参数超出所属实现的值域时会使用本码。固定代表包括内置 GUC 解析、amcheck 描述符/选项、postgres_fdw 选项校验和正则选项检查;首要报文会指出归属和数值。

字段
SQLSTATE 22023
条件名 invalid_parameter_value
状态 有效
已知存在于 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_INVALID_PARAMETER_VALUE
别名

保留的 PostgreSQL 18.6 与 10.21 观察使用同一自动提交案例:SET work_mem = 'not-a-memory-size' 返回 SQLSTATE 22023invalid value for parameter "work_mem": "not-a-memory-size"SET work_mem = '1MB' 修复,SHOW work_mem 返回 1MB。两个后端在错误和修复后均为 IDLE。该案例只绑定内置 GUC 路径,不代表所有 22023 归属;见公共 case JSON

SET work_mem = 'not-a-memory-size';
SET work_mem = '1MB';
SHOW work_mem;

代表性报文

这些示例共用 22023,但属于不同归属:

归属/路径 代表性首要文本
内置 GUC 解析/检查 parameter "%s" requires a Boolean valueinvalid value for parameter "%s": "%s"
verify_heapam relation cannot be nullinvalid skip option — HINT:Valid skip options are "all-visible", "all-frozen", and "none".
postgres_fdw invalid value for floating point option "%s": %sinvalid value for integer option "%s": %s
正则选项解析器 invalid regular expression option: "%.*s"

含义

22023 是多个参数校验机制共用的代码,实际机制取决于报文指出的归属。内置 GUC 先把 Boolean、整数、实数、字符串或 enum 转换,检查整数/实数范围和 B/MB 或时间单位,再调用参数专属 check hook;设置上下文和权限是独立约束。verify_heapam 则检查必填非 NULL 描述符和枚举式 skip 值,postgres_fdw 解析数值/字符串选项与正值边界,regexp 函数校验 option 字母或函数参数。这些组共享 SQLSTATE,却不共享一个通用值域。

诊断

先按首要报文定位命令、函数或扩展。对于 GUC,检查参数类型、允许单位/范围以及当前设置上下文;对于扩展或函数,按其自身选项和边界处理。上面的 work_mem 只证明错误 GUC 值与带单位修复值的一条路径,不能用来推断 amcheck、postgres_fdw、regexp 或其他参数的修复。

处理

按所属参数的文档值域修正值,必要时同时修正单位和设置上下文。显式事务中的语句级 ERROR 后,必须 ROLLBACK 或 ROLLBACK TO SAVEPOINT 才能继续;自动提交客户端可重试修正后的动作。保留的自动提交案例中,同一后端在错误和修复后保持 IDLE。

版本

锁定目录从 7.4 起记录该条件;固定源码覆盖 PostgreSQL 18.6。保留的观察覆盖 PostgreSQL 18.6 与 10.21 上述 work_mem 案例。

2200322025

来源

内置 GUC 转换/范围/check-hook 路径见 src/backend/utils/misc/guc.c#L3129-3320#L6804-6990;单位表见 #L87-181,设置上下文处理见 #L3342-3430,另见 contrib/amcheck/verify_heapam.c#L271-303contrib/postgres_fdw/option.c#L149-185src/backend/utils/adt/regexp.c#L443-446。结构化证据记录保留确切报文、运行摘要和各归属边界。