Подтвердить что ты не робот

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.

4b9b3361

Ответ 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, поэтому вы можете проверить, что целое число, которое вы передаете в своем запросе, ниже этого значения.