Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка PostgreSQL 22003 numeric_value_out_of_range: переполнение чисел

Обновлено: 26.08.2026  ·  Официальная база знаний

СУБД прерывает выполнение операции при попытке записать числовое значение, выходящее за границы допустимого диапазона типа данных:

ERROR: integer out of range
-- либо:
ERROR: numeric field overflow
DETAIL: A field with precision 10, scale 2 must round to an absolute value less than 10^8.
SQLSTATE: 22003

В информационных базах 1С ошибка часто возникает при расчете себестоимости, проведении закрытия месяца, вычислении остатков регистра накопления или переполнении последовательности нумераторов.

1. Анализ диапазона типов данных в PostgreSQL

Тип данныхХранениеМинимальное значениеМаксимальное значение
smallint2 байта-32,768+32,767
integer4 байта-2,147,483,648+2,147,483,647
bigint8 байт-9,223,372,036,854,775,808+9,223,372,036,854,775,807
numeric(p, s)переменнаяОпределяется точностью (p) и масштабом (s)

2. Проверка последовательностей (Sequences) на исчерпание пула ID

SELECT sequencename, last_value, max_value, is_cycled 
FROM pg_sequences 
WHERE last_value >= max_value - 10000;

3. Миграция поля с INTEGER на BIGINT

-- Изменение типа колонки первичного ключа
ALTER TABLE "my_table" ALTER COLUMN "id" TYPE bigint;

-- Изменение последовательности автоинкремента
ALTER SEQUENCE my_table_id_seq AS bigint MAXVALUE 9223372036854775807;

4. Исправление переполнения точности Numeric в 1С:Предприятие

  1. Найдите соответствующий ресурс регистра или реквизит документа в метаданных 1С.
  2. Увеличьте параметр Длина (общая точность) с сохранением нужной Точности (количество знаков после запятой).
  3. Если ошибка возникает внутри запроса СКД/расчета, используйте явное округление или приведение типов: CAST(Выражение КАК ЧИСЛО(18, 2)).
Практический опыт инженера: При работе с регистрами накопления 1С переполнение числовых полей чаще всего сигнализирует о зацикливании алгоритма распределения сумм в коде проведения документов либо о наличии 'висячих' остатков с отрицательными числами.

Частые вопросы (FAQ)

Что делать, если исчерпался serial (int4) первичного ключа крупной таблицы?

Необходимо изменить тип на bigint. Для больших production-таблиц во избежание многочасовой эксклюзивной блокировки миграцию производят созданием новой таблицы с переливом данных через логическую репликацию или утилиту pg_repack.

Почему при делении чисел с плавающей точкой возникает ошибка 22003?

Если результат промежуточного умножения перед делением превышает разрядность целевого NUMERIC(P,S), PostgreSQL вызывает numeric field overflow. Необходимо явно расширять разрядность промежуточных вычислений с помощью CAST(... AS numeric(30, 10)).

Как предотвратить падение сервисов при приближении sequences к максимуму?

Настройте мониторинг в Prometheus/Zabbix через запрос к представлению pg_sequences: percent_used = (last_value::float / max_value::float) * 100 и установите алерт на пороге 85%.

Какова максимальная точность (precision) для типа NUMERIC в PostgreSQL?

В PostgreSQL тип numeric может хранить числа с точностью до 1000 десятичных знаков. Ограничения обычно диктуются клиентским приложением (в 1С максимальная разрядность чисел ограничена 38 знаками).