Ошибка 22003 (numeric_value_out_of_range) означает, что числовое значение выходит за допустимый диапазон типа данных. PostgreSQL отклоняет операцию, когда результат не помещается в целевой тип – при вставке, приведении или арифметике.
Частые причины
- Значение превышает диапазон типа (например, число больше 32767 в колонке smallint).
- Для numeric(precision, scale) целая часть длиннее, чем допускает precision минус scale.
- Переполнение при арифметике или приведении к меньшему типу.
Как исправить
- Определите тип колонки и сопоставьте с записываемым значением:
- Приведите значение к типу нужной емкости или расширьте тип колонки:
- Для numeric увеличьте точность, если не хватает разрядов целой части:
\d orders
ALTER TABLE orders ALTER COLUMN total TYPE bigint;
ALTER TABLE orders ALTER COLUMN price TYPE numeric(12, 2);