PostgreSQL: как решить проблему «переполнения числового поля» - PullRequest
19 голосов
/ 08 сентября 2011

У меня есть таблица со следующей схемой

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.

Ответы [ 2 ]

62 голосов
/ 08 сентября 2011

Похоже, что ваши столбцы year и week_of_month определены как numeric(17,17), что означает 17 цифр, 17 из которых находятся после десятичной точки. Таким образом, значение должно быть между 0 и 1. Возможно, вы имели в виду numeric(17,0), или, возможно, вам следует использовать целочисленный тип.

0 голосов
/ 14 февраля 2017

У меня была похожая проблема даже без установки верхнего предела. Если это произойдет с вами, вы можете посмотреть на глобальные ограничения PostgreSQL здесь: https://www.postgresql.org/docs/9.6/static/datatype-numeric.html

Например, TIMESTAMP - это разновидность BIGINT с пределом 9223372036854775807, поэтому вы можете проверить, что целое число, которое вы передаете в запросе, ниже этого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...