22003: numeric_value_out_of_range
PostgreSQL含义
数值超出了目标类型允许的范围。例如,向 integer 列写入大于 20 亿的值,或数字对 numeric(5,2) 列来说过大。
原因
超出 smallint/integer/bigint 限制;超出 numeric(p,s) 的精度/小数位数;算术溢出;和/积超出类型容量;序列达到其类型的上限。
解决方法
将列/参数改为更宽的类型(用 bigint 代替 integer,增大 numeric 精度):ALTER TABLE my_table ALTER COLUMN my_column TYPE bigint; 根据业务规则对值取整(ROUND)或进行校验。如果中间计算溢出,以 numeric 类型计算表达式。对于序列溢出,加宽类型。