← 中文资源

简体中文版本

PostgreSQL 报错 22P02 类型输入语法无效

通过让字面量格式匹配列类型并在插入前校验输入,修复 PostgreSQL 的 22P02。

阅读英文原文

症状

插入或查询以 invalid input syntax for type integer 或 uuid 之类的错误失败。该字面量无法按该类型解析,常见原因是空字符串或非数值进入数值列,或驱动把文本类型的参数发往更严格的列。批量操作中失败可能只出现在个别行,指向数据而非查询。

诊断

读取错误中的类型与值;用显式 cast 复现;在应用层追踪该字段的来源。

psql -c "insert into t (num) values ('abc')"

根因

提供的值的文本表示无法按列类型解析,数据库在存储前拒绝了该输入。

修复

写入前校验并转换值使其匹配列类型;数值或日期列避免空字符串;在客户端使用正确的参数类型。在上游清洗数据比依赖数据库强制转换更可靠。

验证

重跑插入确认成功,并确认存储值的类型与内容符合预期。存储正确即证明输入已匹配列类型。

常见陷阱

用空串代替 NULL 表示缺失,会在数值日期列直接报错;应按类型语义使用 NULL。