PostgreSQL: как решить проблему с "числовым полем"
У меня есть таблица со следующей схемой
COLUMN_NAME, ORDINAL_POSITION,...., NUMERIC_PRECISION_INTEGER
"Год"; 1; ";" ДА "," цифровая ";;; 17; 10; 17" Month_num"; 2; ";" ДА "," цифровая ";;; 17; 10; 17" Month_name"; 3; ";" ДА "," Текст "1073741824;;;;;
" WEEK_OF_MONTH"; 4 ";";" ДА "," цифровая ";;; 17; 10; 17
" count_of_contracts"; 5; ";" Да ";" BigInt";;; 64; 2; 0
но когда я вставляю в него следующее
insert into contract_fact values(2011, 8, 'Aug', 1, 367)
Я вижу следующую ошибку
ОШИБКА: переполнение числового поля
Состояние SQL: 22003
Подробно: поле с точностью 17, шкала 17 должна округляться до абсолютного значения менее 1.
Ответы
Ответ 1
Похоже, что у вас есть столбцы year
и week_of_month
, определенные как numeric(17,17)
, что означает 17 цифр, из которых 17 стоят за десятичной точкой. Таким образом, значение должно быть между 0 и 1. Вероятно, вы имели в виду numeric(17,0)
, или, возможно, вам следует использовать целочисленный тип.
Ответ 2
У меня была аналогичная проблема, даже не установив верхний предел.
Если это произойдет с вами, вы можете посмотреть глобальные ограничения PostgreSQL: https://www.postgresql.org/docs/9.6/static/datatype-numeric.html
Например, TIMESTAMP - это своего рода BIGINT с ограничением 9223372036854775807
, поэтому вы можете проверить, что целое число, которое вы передаете в своем запросе, ниже этого значения.