INTEGER и BIGINT

Тема дорожной карты · PostgreSQL

PostgreSQL предоставляет три основных целочисленных типа для хранения целых чисел в реляционной базе данных: smallint (2 байта, диапазон от −32 768 до 32 767), integer (4 байта, диапазон примерно ±2,1 млрд) и bigint (8 байт, диапазон примерно ±9,2 × 10¹⁸). Правильный выбор целочисленного типа важен как для эффективности хранения, так и для корректности: тип, слишком малый для ожидаемого диапазона данных, вызовет ошибку переполнения в SQL-запросах. PostgreSQL также предлагает псевдотипы serial, smallserial и bigserial, объединяющие целочисленный тип с автоинкрементной последовательностью и широко используемые для суррогатных первичных ключей. Для современных схем SQL-стандартный атрибут столбца GENERATED ALWAYS AS IDENTITY является рекомендуемой альтернативой serial в PostgreSQL. Понимание этих целочисленных типов помогает разработчикам проектировать эффективные схемы и типы данных, соответствующие их рабочей нагрузке.

Как это работает

INTEGER и BIGINT покрывает numeric (int, bigint, numeric, real, double), character (text, varchar, char — берите text, кроме реального лимита), date/time (timestamp, timestamptz — всегда tz-вариант), boolean, JSONB (запросимый JSON с GIN-индексами), массивы (int[], text[]), ranges (int4range, tsrange), UUID, network (inet, cidr), геометрические, кастомные через DOMAIN или CREATE TYPE. Postgres необычно богат — используйте типы, а не перегружайте text/JSONB.

Когда применять

Всегда timestamptz (timestamp with time zone) для меток времени — Postgres хранит UTC + конвертирует на показ. numeric(10,2) для денег, никогда real/float (округление). uuid для ID, видимых клиентам (нет утечки объёма vs integer); bigint — для внутренних high-volume последовательностей. JSONB (не JSON) — бинарный, индексируется, быстрее. Enum использовать аккуратно (тяжело мигрировать); lookup-таблица часто яснее.

Типичные ошибки

Ловушки INTEGER и BIGINT: timestamp (без tz) и тихое хранение локального (DST-ужас); varchar(255) "потому что MySQL" (в Postgres нет perf-выгоды — используйте text); JSON вместо JSONB (текст, медленней, без индексов); float для денег (копейка тут, копейка там — за годы). Прочтите справочник типов — окупается лучшими решениями по схеме.

Связанные понятия

Полезные ресурсы