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

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

百科 / SQL 状态码 / Class 22 数据异常

22001 string_data_right_truncation

ERROR 已实测 详解 实测通过

类别
Class 22 数据异常
严重等级
ERROR
条件名
string_data_right_truncation
宏名称
ERRCODE_STRING_DATA_RIGHT_TRUNCATION
最早已知存在
7.4
状态
有效

版本覆盖

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

速览

固定 varchar 路径报告 value too long for type character(%d);hstore、varbit 等路径会使用各自的具体变体。

共享案例创建 varchar_limits(value varchar(3)),用 'too-long' 触发 22001,再插入修复值 'ok' 并查询存储值。应在自动提交下逐条发送这些语句:触发语句预期失败,之后再执行修复语句。案例运行器在结束阶段负责清理对象。

CREATE TABLE varchar_limits (value varchar(3));
INSERT INTO varchar_limits VALUES ('too-long');
INSERT INTO varchar_limits VALUES ('ok');
SELECT value FROM varchar_limits;

校准实测 character varying(3) 拒绝超长值并报告 value too long for type character varying(3);修正值 ok 成功,运行器的两条自动提交会话均回到 IDLE。

报文

固定 character 和 varchar guard 以 ERROR 严重性报告 primary 模板 value too long for type character(%d) 与 value too long for type character varying(%d)。hstore 与 varbit 路径使用各自的 primary:string too long for hstore key、string too long for hstore value 和 bit string too long for type bit varying(%d)。这些源码组没有独立 DETAIL 或 HINT;本次运行只观察了上面的 varchar 模板。

报文模板

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

主消息 value too long for type character(%d)

来源: 来源:src/backend/utils/adt/varchar.c @ REL_18_6

主消息 value too long for type character varying(%d)

来源: 来源:src/backend/utils/adt/varchar.c @ REL_18_6

主消息 string too long for hstore key

来源: 来源:contrib/hstore/hstore_io.c @ REL_18_6

主消息 string too long for hstore value

来源: 来源:contrib/hstore/hstore_io.c @ REL_18_6

主消息 bit string too long for type bit varying(%d)

来源: 来源:src/backend/utils/adt/varbit.c @ REL_18_6

含义

当值无法满足字符串类型的长度契约时会出现 22001。PostgreSQL 按字符数而不是字节数计算 character(n) 和 character varying(n),因此 value too long for type character(%d) 中的 %d 指向响应里的 typmod。固定 varchar.c 是服务器端检查;hstore 键值和 bit string 有各自的路径和消息。

值进入类型的方式也会改变边界。varchar() 和 bpchar() 都接收 isExplicit 标志:赋值/输入转换遇到超出的非空格字符会报错,而显式 cast 到有界类型可以按 PostgreSQL 字符类型规则截断;超出的尾随空格和非空格字符处理不同。修改存储或校验前应先明确这个选择。

诊断

保存 schema_name、table_name、column_name、datatype_name、routine 和完整 message。先从目录确认目标类型和 typmod,再按字符数而不是字节数测量实际值。区分赋值/插入、显式 cast,以及 hstore/bit 路径,因为它们的截断行为并不完全相同。

常见 varchar 路径要检查超出宽度的后缀是否全是尾随空格。只有尾随空格超出时可能适用字符类型的截断规则;有意义的非空格数据应视为契约被拒绝。固定源码消息说明的是类型宽度问题,不是一般编码或网络错误。

处置

选择能保留数据契约的修复:校验并拒绝超长输入,有意扩大列/类型,或只在业务明确允许时显式 cast 截断。截断前保存原值和目标 typmod;静默裁剪标识符、键或审计文本可能写入与调用方意图不同的内容。本次固定案例使用自动提交,失败语句结束后会话仍为 IDLE;显式事务中应先回滚整个事务,或回滚到语句前建立的保存点,再重试修正值。修正输入或 schema 后重新转换,并核对保存后的字符长度。

可复现案例

在一次性实例上执行过的场景。其中 1 个附有可执行 SQL,正文相应小节里给出。

varchar_width_overflow PG 10 / 18 有 SQL

触发

Insert a value longer than the declared varchar(3) width.

断言

  • SQLSTATE is 22001
  • The varchar width diagnostic names character varying(3)
  • The failed autocommit session remains IDLE
  • A representable value is stored after the error

处置

Use a value that satisfies the declared width or revise the data contract explicitly; do not rely on an explicit cast that silently truncates the input.

清理

Drop the case schema with an owner connection.

版本

锁定目录从 7.4 记录该条件,并在列出的正式快照及 19beta3 中出现;固定源码覆盖为 PostgreSQL 18.6。

来源

证据

断言

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

运行记录

目标服务器版本结果覆盖案例
latest 18.6 (Homebrew) passed 案例:varchar_width_overflow
pg10 10.21 (Debian 10.21-1.pgdg90+1) passed 案例:varchar_width_overflow

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 22 数据异常 Data Exception 68 个 ↗
22000 data_exception ERRCODE_DATA_EXCEPTION ERROR 7.4 起已知
数据异常的通用类别,具体原因见成员码。 有效
22001 string_data_right_truncation ERRCODE_STRING_DATA_RIGHT_TRUNCATION ERROR 7.4 起已知
值超过目标类型长度而被右截断。 有效
22002 null_value_no_indicator_parameter ERRCODE_NULL_VALUE_NO_INDICATOR_PARAMETER ERROR 7.4 起已知
返回 NULL 但没有提供指示变量,见于 ECPG。 有效
22003 numeric_value_out_of_range ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE ERROR 7.4 起已知
数值超出目标类型范围,如整数溢出。 有效
22004 null_value_not_allowed ERRCODE_NULL_VALUE_NOT_ALLOWED ERROR 7.4 起已知
参数或值不允许为 NULL。 有效
22005 error_in_assignment ERRCODE_ERROR_IN_ASSIGNMENT ERROR 7.4 起已知
赋值违反目标变量契约,如变量声明为 CONSTANT。 有效
22007 invalid_datetime_format ERRCODE_INVALID_DATETIME_FORMAT ERROR 7.4 起已知
日期时间格式串无效,如 interval 格式错误。 有效
22008 datetime_field_overflow ERRCODE_DATETIME_FIELD_OVERFLOW ERROR 7.4 起已知
日期或时间字段取值越界。 有效
22009 invalid_time_zone_displacement_value ERRCODE_INVALID_TIME_ZONE_DISPLACEMENT_VALUE ERROR 7.4 起已知
时区偏移量超出支持范围。 有效
2200B escape_character_conflict ERRCODE_ESCAPE_CHARACTER_CONFLICT ERROR 7.4 起已知
转义字符与其他字符冲突。 有效
2200C invalid_use_of_escape_character ERRCODE_INVALID_USE_OF_ESCAPE_CHARACTER ERROR 7.4 起已知
转义字符用法无效,如 SIMILAR TO 模式错误。 有效
2200D invalid_escape_octet ERRCODE_INVALID_ESCAPE_OCTET ERROR 7.4 起已知
转义八位组无效的数据异常条件。 有效
2200F zero_length_character_string ERRCODE_ZERO_LENGTH_CHARACTER_STRING ERROR 7.4 起已知
操作拒绝了零长度字符串。 有效
2200G most_specific_type_mismatch ERRCODE_MOST_SPECIFIC_TYPE_MISMATCH ERROR 7.4 起已知
无法确定值的最具体类型,类型不匹配。 有效
2200H sequence_generator_limit_exceeded ERRCODE_SEQUENCE_GENERATOR_LIMIT_EXCEEDED ERROR 10.0 起已知
nextval 触及序列的最大值或最小值。 有效
2200L not_an_xml_document ERRCODE_NOT_AN_XML_DOCUMENT ERROR 8.3.0 起已知
输入不满足 XML DOCUMENT 形式要求。 有效
2200M invalid_xml_document ERRCODE_INVALID_XML_DOCUMENT ERROR 8.3.0 起已知
XML 文档解析失败,文档无效。 有效
2200N invalid_xml_content ERRCODE_INVALID_XML_CONTENT ERROR 8.3.0 起已知
XML 内容无效,未通过 CONTENT 模式解析。 有效
2200S invalid_xml_comment ERRCODE_INVALID_XML_COMMENT ERROR 8.3.0 起已知
XML 注释无效,含 -- 或以 - 结尾。 有效
2200T invalid_xml_processing_instruction ERRCODE_INVALID_XML_PROCESSING_INSTRUCTION ERROR 8.3.0 起已知
XML 处理指令无效,目标名或内容非法。 有效
22010 invalid_indicator_parameter_value ERRCODE_INVALID_INDICATOR_PARAMETER_VALUE ERROR 7.4 起已知
指示参数取值不符合规则。 有效
22011 substring_error ERRCODE_SUBSTRING_ERROR ERROR 7.4 起已知
substring 长度参数为负等取子串错误。 有效
22012 division_by_zero ERRCODE_DIVISION_BY_ZERO ERROR 7.4 起已知
除法或取模运算遇到零除数。 有效
22013 invalid_preceding_or_following_size ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE ERROR 11.0 起已知
窗口帧的 PRECEDING/FOLLOWING 偏移为负。 有效
22014 invalid_argument_for_ntile_function ERRCODE_INVALID_ARGUMENT_FOR_NTILE ERROR 8.4.0 起已知
ntile 的桶数量必须大于零。 有效
22015 interval_field_overflow ERRCODE_INTERVAL_FIELD_OVERFLOW ERROR 7.4 起已知
interval 输入字段超出可接受范围。 有效
22016 invalid_argument_for_nth_value_function ERRCODE_INVALID_ARGUMENT_FOR_NTH_VALUE ERROR 8.4.0 起已知
nth_value 的序号必须大于零。 有效
22018 invalid_character_value_for_cast ERRCODE_INVALID_CHARACTER_VALUE_FOR_CAST ERROR 7.4 起已知
字符值无法通过所要求的类型转换。 有效
22019 invalid_escape_character ERRCODE_INVALID_ESCAPE_CHARACTER ERROR 7.4 起已知
操作拒绝了给定的转义字符。 有效
2201B invalid_regular_expression ERRCODE_INVALID_REGULAR_EXPRESSION ERROR 7.4 起已知
正则表达式无效,编译或执行阶段被拒绝。 有效
2201E invalid_argument_for_logarithm ERRCODE_INVALID_ARGUMENT_FOR_LOG ERROR 8.0.0 起已知
对数函数参数为零或负数。 有效
2201F invalid_argument_for_power_function ERRCODE_INVALID_ARGUMENT_FOR_POWER_FUNCTION ERROR 8.0.0 起已知
幂运算参数使实数结果无定义。 有效
2201G invalid_argument_for_width_bucket_function ERRCODE_INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION ERROR 8.0.0 起已知
width_bucket 参数无效,如桶数非正。 有效
2201W invalid_row_count_in_limit_clause ERRCODE_INVALID_ROW_COUNT_IN_LIMIT_CLAUSE ERROR 8.4.0 起已知
LIMIT 行数无效,不能为负。 有效
2201X invalid_row_count_in_result_offset_clause ERRCODE_INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE ERROR 8.4.0 起已知
OFFSET 行数无效,不能为负。 有效
22021 character_not_in_repertoire ERRCODE_CHARACTER_NOT_IN_REPERTOIRE ERROR 7.4 起已知
字节序列对目标编码无效。 有效
22022 indicator_overflow ERRCODE_INDICATOR_OVERFLOW ERROR 7.4 起已知
指示变量容纳不下接口返回的结果。 有效
22023 invalid_parameter_value ERRCODE_INVALID_PARAMETER_VALUE ERROR 7.4 起已知
参数或选项取值超出允许范围。 有效
22024 unterminated_c_string ERRCODE_UNTERMINATED_C_STRING ERROR 7.4 起已知
C 风格字符串缺少终止符。 有效
22025 invalid_escape_sequence ERRCODE_INVALID_ESCAPE_SEQUENCE ERROR 7.4 起已知
转义序列无效,如 ESCAPE 参数非单字符。 有效
22026 string_data_length_mismatch ERRCODE_STRING_DATA_LENGTH_MISMATCH ERROR 7.4 起已知
位串长度与声明的类型长度不一致。 有效
22027 trim_error ERRCODE_TRIM_ERROR ERROR 7.4 起已知
trim 操作的参数或裁剪规格无效。 有效
2202E array_subscript_error ERRCODE_ARRAY_SUBSCRIPT_ERROR ERROR 7.4 起已知
数组下标或维度错误,如拼接维度不兼容。 有效
2202G invalid_tablesample_repeat ERRCODE_INVALID_TABLESAMPLE_REPEAT ERROR 9.5.0 起已知
TABLESAMPLE 的 REPEATABLE 种子不能为空。 有效
2202H invalid_tablesample_argument ERRCODE_INVALID_TABLESAMPLE_ARGUMENT ERROR 9.5.0 起已知
TABLESAMPLE 方法收到越界的采样参数。 有效
22030 duplicate_json_object_key_value ERRCODE_DUPLICATE_JSON_OBJECT_KEY_VALUE ERROR 12.0 起已知
构造 JSON 对象时出现重复键。 有效
22031 invalid_argument_for_sql_json_datetime_function ERRCODE_INVALID_ARGUMENT_FOR_SQL_JSON_DATETIME_FUNCTION ERROR 13.0 起已知
SQL/JSON datetime 方法的参数或格式无效。 有效
22032 invalid_json_text ERRCODE_INVALID_JSON_TEXT ERROR 12.0 起已知
JSON 文本无效,无法被消费方解析。 有效
22033 invalid_sql_json_subscript ERRCODE_INVALID_SQL_JSON_SUBSCRIPT ERROR 12.0 起已知
SQL/JSON 数组下标无效,如越界或非数值。 有效
22034 more_than_one_sql_json_item ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM ERROR 12.0 起已知
SQL/JSON 结果多于一项,需要单项。 有效
22035 no_sql_json_item ERRCODE_NO_SQL_JSON_ITEM ERROR 12.0 起已知
指定 SQL/JSON path 没有找到任何项。 有效
22036 non_numeric_sql_json_item ERRCODE_NON_NUMERIC_SQL_JSON_ITEM ERROR 12.0 起已知
JSON 路径项方法收到非数值的项。 有效
22037 non_unique_keys_in_a_json_object ERRCODE_NON_UNIQUE_KEYS_IN_A_JSON_OBJECT ERROR 12.0 起已知
JSON 对象中的键不唯一。 有效
22038 singleton_sql_json_item_required ERRCODE_SINGLETON_SQL_JSON_ITEM_REQUIRED ERROR 12.0 起已知
SQL/JSON 路径要求单一指定类型的结果。 有效
22039 sql_json_array_not_found ERRCODE_SQL_JSON_ARRAY_NOT_FOUND ERROR 12.0 起已知
JSON 路径访问器要求数组却收到非数组项。 有效
2203A sql_json_member_not_found ERRCODE_SQL_JSON_MEMBER_NOT_FOUND ERROR 12.0 起已知
JSON 对象成员不存在或当前项不是对象。 有效
2203B sql_json_number_not_found ERRCODE_SQL_JSON_NUMBER_NOT_FOUND ERROR 12.0 起已知
jsonpath 一元运算收到非数值的项。 有效
2203C sql_json_object_not_found ERRCODE_SQL_JSON_OBJECT_NOT_FOUND ERROR 12.0 起已知
JSON 路径访问器要求对象却收到非对象项。 有效
2203D too_many_json_array_elements ERRCODE_TOO_MANY_JSON_ARRAY_ELEMENTS ERROR 12.0 起已知
JSON 数组元素数量过多。 有效
2203E too_many_json_object_members ERRCODE_TOO_MANY_JSON_OBJECT_MEMBERS ERROR 12.0 起已知
JSON 对象成员数量过多。 有效
2203F sql_json_scalar_required ERRCODE_SQL_JSON_SCALAR_REQUIRED ERROR 12.0 起已知
JSON_VALUE 要求标量,收到的项不是标量。 有效
2203G sql_json_item_cannot_be_cast_to_target_type ERRCODE_SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE ERROR 15.0 起已知
SQL/JSON 项无法转换为目标类型。 有效
22P01 floating_point_exception ERRCODE_FLOATING_POINT_EXCEPTION ERROR 7.4 起已知
浮点异常,进程收到 SIGFPE 信号。 有效
22P02 invalid_text_representation ERRCODE_INVALID_TEXT_REPRESENTATION ERROR 7.4 起已知
文本无法解析为目标类型,如整数输入非法。 有效
22P03 invalid_binary_representation ERRCODE_INVALID_BINARY_REPRESENTATION ERROR 7.4 起已知
二进制数据格式无效,如 Bind 参数或二进制 COPY。 有效
22P04 bad_copy_file_format ERRCODE_BAD_COPY_FILE_FORMAT ERROR 7.4 起已知
COPY 文件结构错误,如字段数或头部不符。 有效
22P05 untranslatable_character ERRCODE_UNTRANSLATABLE_CHARACTER ERROR 7.4 起已知
字符在目标编码中没有对应表示。 有效
22P06 nonstandard_use_of_escape_character ERRCODE_NONSTANDARD_USE_OF_ESCAPE_CHARACTER ERROR 8.1.0 起已知
字符串字面量中反斜杠转义用法非标准。 有效